3

Ember.jsをEmberDataで使用する場合Model.find()、結果のレコードが利用可能になるとすぐに呼び出されるハンドラーをバインドできるようにしたいと思いますDS.RecordArray。私は解決策を見つけましたが、もっと良い方法があるに違いないと思います。

私の現在のソリューションでは、 Array.addArrayObserverを使用しています。たとえば、架空のモデルの場合、次のようになりApp.Widgetます。

// Find the widgets!
var widgets = App.Widget.find();

// Get notified when widget records are available...
var arrayObserver = Ember.Object.create({
    arrayWillChange: function(start, removeCount, addCount) {
        // Widget records are about to be loaded.
    },
    arrayDidChange: function(start, removeCount, addCount) {
        // Widget records have now been loaded.
        var myWidget = widgets.objectAt(0);
    }
});

// Add the above arrayObserver to the widgets array
widgets.addArrayObserver(arrayObserver);

これは私が望むことを達成するための確立された方法ですか、それともより良い方法がありますか?

4

2 に答える 2

1

必要なデータにバインドするコントローラーでは、content.isLoadedプロパティを監視できます。このプロパティは、ストアアダプターがデータをロードするとtrueに設定されます。

contentLoaded: function() {
    console.log('controller content is loaded from store');
}.observes('content.isLoaded')
于 2013-03-14T20:25:26.253 に答える
1

これを達成するためにPromisesを使用できます...

// Find the widgets!
App.Widget.find()
    .then(function(widgets) {
        var myWidget = widgets.objectAt(0);
    });
于 2013-07-01T20:42:20.463 に答える