带有Ember和Ember-Data的Socket.IO

Cha*_*had 18 socket.io ember.js ember-data

我一直在四处寻找,我找不到任何最新的ember(1.0.0-rc.1)和ember-data(修订版11)也使用socket.io的例子.我尝试过这样的事情.

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);
    });
  }
});
Run Code Online (Sandbox Code Playgroud)

这实际上将创建一个新的模型类,它将对象推送到控制器,并创建一个新的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>
Run Code Online (Sandbox Code Playgroud)

这与运行循环有关吗?如何强制渲染值?或者有更好的方法吗?

Jak*_*old 15

有一个非常简单的解决方案,我在我的一些应用程序中使用.您可以为套接字设置通用回调并接受任何类型的数据

callback: function(message) {
  // this is better than just `eval`
  var type = Ember.get(Ember.lookup, message.type);
  store.load(type, message.data);
}
Run Code Online (Sandbox Code Playgroud)

或者在这里它专门针对您的用例量身定制

socket.on('apartment/new', function(apartment) {
  store.load(App.Apartment, apartment);
});
Run Code Online (Sandbox Code Playgroud)

using store.load将把记录数据直接加载到身份映射中.还有loadMany加载多个记录.