我创建了一个小示例,尝试在没有Ember Data的情况下使多个模型正常工作。
App = Ember.Application.create();
App.Router.map(function () {
this.resource('employees', function () {
this.route('employee');
});
});
App.Employee = Ember.Object.extend({});
App.Employee.reopenClass({
findAll: function () {
return $.getJSON("http://localhost/api/employee").then(
function (response) {
var employees = [];
response.forEach(function (child) {
employees.push(App.Employee.create(child));
});
console.log(employees.join('\n'));
return employees;
}
);
}
});
App.EmployeesController = Ember.ArrayController.extend({});
App.EmployeesRoute = Ember.Route.extend({
model: function () {
return App.Employee.findAll();
}
});
Handlebars
<script type="text/x-handlebars">
<p>Application template</p>
{{#linkTo employees}}<button>Show employees</button>{{/linkTo}}
{{outlet}}
</script>
<script type="text/x-handlebars" data-template-name="employees">
<p>Employees template</p>
{{#each controller}}
<p>{{Name}}</p>
{{/each}}
{{outlet}}
</script>
当我直接导航到
localhost/#/employee
url时,它可以很好地工作,但是当我单击“显示员工”按钮时,出现以下错误:Uncaught TypeError: Object #<Object> has no method 'addArrayObserver'
我可能在某处丢失了某些内容,但是我不确定该错误所指向的对象。按下按钮时,将正确调用我的模型钩子(Hook),就像通过手动输入url进行导航一样,因此我不了解上述两种情况的确切区别。
最佳答案
终于使这件事起作用了。
我的错误是尝试在没有Ember Data的情况下重新创建(读取复制-粘贴)Evil Trout's example以执行Ember应用程序,并且对基础概念的理解不够充分。
我的findAll
方法正在返回Promise对象,尽管 Controller 需要一个数组,因此需要Uncaught TypeError
。您需要做的是返回一个空的ArrayProxy
,一旦收到JSON响应,就会填充该空ArrayController
。
App.Employee.reopenClass({
findAll: function () {
var employees = Ember.ArrayProxy.create({ content: [] });
$.getJSON("http://localhost:49441/api/employee").then(
function (response) {
response.forEach(function (child) {
employees.pushObject(App.Employee.create(child));
});
}
);
return employees;
}
});
如果使用此方法正确返回数组,则不必显式指定 Controller 为ojit_code。
现在,我知道自己做错了什么,这是一个愚蠢的问题,但是希望它可以帮助其他人入门。
关于ember.js - 您如何在Ember JS中使用多个模型(没有Ember Data)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15970755/