我一直在四处寻找,但找不到任何也使用socket.io的ember(1.0.0-rc.1)和ember-data(修订版11)的最新示例。我已经尝试过类似的事情。
App.ApplicationRoute = Ember.Route.extend({
setupController: function(controller, data) {
var socket = io.connect(),
self = this;
socket.on('apartment/new', function(apartment) {
var apt = App.Apartment.createRecord(apartment);
self.controllerFor('apartments').pushObject(apt);
});
}
});
这实际上会创建一个新的模型类,它将对象推送到 Controller ,并创建一个新的 li 但值不会呈现。
<ul class="list-view">
{{#each apartment in controller}}
<li>
{{#linkTo 'apartment' apartment }}
<span class="date">{{date apartment.date}}</span>
{{apartment.title}}
{{/linkTo}}
</li>
{{/each}}
</ul>
这和运行循环有关系吗?如何强制渲染值?或者有更好的方法吗?
最佳答案
对此有一个非常简单的解决方案,我在一些应用程序中使用了它。您可以为套接字提供通用回调并接受任何类型的数据
callback: function(message) {
// this is better than just `eval`
var type = Ember.get(Ember.lookup, message.type);
store.load(type, message.data);
}
或者在这里它是专门根据您的用例定制的
socket.on('apartment/new', function(apartment) {
store.load(App.Apartment, apartment);
});
使用store.load
会将记录数据直接加载到身份映射中。还有用于加载多条记录的 loadMany
。
关于ember.js - Socket.IO 与 Ember 和 Ember-Data,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15376839/