我有一个不适合 Ember-Data 的 Rest Adapter 的 API。大约有 3 个模型,因此我决定使用来自 jQuery 的普通旧 $.ajax。在找到一种如何检索模型并以正确的方式将它们传递给控制器的方法时,我大吃一惊。
考虑以下来自指南的示例:
App.Router.map(function(match) {
match('/posts').to('posts');
});
App.PostsRoute = Ember.Route.extend({
model: function() {
return App.Post.findAll(); // Just renamed to .findAll.
}
});
我发现 .findAll 方法必须返回一个 E.ArrayProxy 的实例,否则不可能做这样的事情:
{{#if content}}
...
{{else}}
<strong>Nothing to display</strong>
{{/if}}
我的实现看起来是这样的:
App.Post.reopenClass({
findAll: function() {
var result = Ember.ArrayProxy.create({content: []});
$.getJSON('/posts', function(data) {
$.each(data, function(i, row) {
result.pushObject(App.Post.create(row));
});
});
return result;
}
});
我对此非常满意,但我无法想象如何使用单个对象。
App.PostsRoute = Ember.Route.extend({
model: function(params) {
return App.Post.find(params.post_id);
}
});
// This will not work for me. Controller's content property will alway be null.
App.Post.reopenClass({
find: function(postId) {
var result = null;
$.getJSON('/' + postId, function(data) {
result = App.Post.create(data);
});
return result;
}
});
解决办法是什么?
我是否应该返回带有空内容的虚拟 Ember.ObjectProxy 实例,并在内容实际填充了对象后以某种方式让 Ember 知道?什么是黄金之路?