Ember.js'对象'和'ArrayController'

时间:2012-03-09 22:03:35

标签: javascript model-view-controller ember.js

我的脚已经湿了一点Ember.js。我正在尝试创建一个超级简单的表单,让您提交查询。

App = Ember.Application.create();

App.QueryFormView = Ember.View.extend({
    submitQuery: function () {
        App.queries.pushObject({
            firstName: this.get('name'),
            message: this.get('message')
        });

        App.queries.save();
    }
});

// Model
App.Query = Ember.Object.extend();

// Collection
App.queries = Ember.ArrayController.create({
    content: [],
    save: function () {
        $.post('api/query', JSON.stringify(this.toArray()), function (data) {
            // Queries saved
        });
    }
});

每次提交查询表单时,我都会将对象推送到queries ArrayController,然后运行save。

但是,我很难理解Ember.Object aka模型在哪里发挥作用。它在这里根本没有被使用,我想知道如何正确使用它。

1 个答案:

答案 0 :(得分:3)

您没有 使用Ember.Object。如果您从不想进行任何绑定,计算属性或观察任何属性更改,则不需要。

但是,如果你想要做任何这些事情,你可以修改你的代码:

记录模型中的预期字段。

// Model
App.Query = Ember.Object.extend({
  firstName: null, // just to indicate what props you're expecting
  lastName: null
});

创建模型对象而不是匿名对象。

submitQuery: function () {
    App.queries.pushObject(App.Query.create({   // .create() here
        firstName: this.get('name'),
        message: this.get('message')
    });

    App.queries.save();
}

现在是的缺点。 JSON.stringify()将序列化您不想要的内部内容。因此,通过线路发送的每个对象必须简化为您想要的属性。可以在此处找到有关此问题的帮助:Reflection on EmberJS objects? How to find a list of property keys without knowing the keys in advance

save: function () {

    var obj = buildSimpleObject(this); // implements this somehow

    $.post('api/query', JSON.stringify(obj.toArray()), function (data) {
        // Queries saved
    });
}