18

いろいろ調べてみましたが、socket.io も使用している ember (1.0.0-rc.1) と ember-data (revision 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);
    });
  }
});

これにより、実際には新しいモデル クラスが作成され、オブジェクトがコントローラーにプッシュされ、新しい 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>

これは実行ループと関係がありますか? 値を強制的にレンダリングするにはどうすればよいですか? または、これに対するより良いアプローチはありますか?

4

2 に答える 2

15

これには、いくつかのアプリで使用している非常に簡単な解決策があります。ソケットの汎用コールバックを設定して、あらゆる種類のデータを受け入れることができます

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すると、レコードデータがIDマップに直接ロードされます。loadMany複数のレコードをロードするためにもあります。

于 2013-03-16T09:32:52.713 に答える