我创建了一个小示例,尝试在没有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/

10-12 12:59
查看更多