sách gpt4 ai đã đi

ember.js - Ember 数据和 Ember StateManager

In lại 作者:行者123 更新时间:2023-12-05 01:28:11 28 4
mua khóa gpt4 Nike

我有一个应用程序,它使用 ember-data 来持久化数据和 StateManager 来驱动其全局状态。由于加载数据是异步的,我想知道如何捕获表示所有数据都已加载的事件。
准确地说,我有一个名为“正在加载”的状态,我在其中加载数据:

App.store.find(App.Model, ....)

加载模型后,我会进行一些后期处理。这是在名为“后处理”的“加载”子状态中完成的。当每个模型都有一个“didLoad”事件时,我转换到“后处理”:
App.Model = DS.Model.extend {
didLoad: ->
stateManager.send('postProcess',this)
}

当每个数据都被加载和后处理时,应用程序应该转换到另一个与“加载”处于同一级别的“编辑”状态:
      loading -> postprocessing
root /
\
editing

我应该捕捉什么事件才能使转换发生? ember-data Store 有回调吗?

1 Câu trả lời

使用 ember-data 时,find 方法返回一个数组代理。您可以观察该对象上的 isLoaded 字段。

var data = App.store.find(App.Model, {});
data.addObserver('isLoaded', function() {
if (data.get('isLoaded')) {
....
}
});

但请记住通过 removeObserver 清理您的观察者。

我将此实用程序添加到内置的 ember-data 记录数组中。
DS.RecordArray.reopen({
onLoad: function(callback) {
if (this.get('isLoaded')) {
callback(this);
} khác {
var that = this;
var isLoadedFn = function() {
if (that.get('isLoaded')) {
that.removeObserver('isLoaded', isLoadedFn);
callback(that);
}
}

this.addObserver('isLoaded', isLoadedFn);
}

return this;
}
}

所以现在你可以做
App.store.find(App.Model, {}).onLoad(function(data) {
....
});

你也可以做类似的事情
init: function() {
this.set('data', App.store.find(App.model, {}));
},

onData: function() {
if (this.get('data.isLoaded')) {
...
}
}.observes('data.isLoaded')

关于ember.js - Ember 数据和 Ember StateManager,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10616287/

28 4 0
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com