在持久性emberjs

时间:2015-05-18 04:16:45

标签: javascript ember.js ember-cli

我至少暂时没有使用余烬数据。我想知道如何在创建新记录后更新DOM?例如,我添加了一家新公司。这是我所做的简化版本。

因为我没有使用ember数据,所以这是我的适配器:

export default Ember.Object.extend({
    findAll: function(){
        return ajax('http://localhost:8000/api/v1/companies?includes=detail')
            .then(function(response){
                return response.data.map(function(c){
                    return {
                        name: c.name,
                        slug: c.slug,
                        address: c.detail.data.address,
                        city: c.detail.data.city,
                        state: c.detail.data.state,
                        country: c.detail.data.country,
                        zip_code: c.detail.data.zip_code,
                        unformatted_phone: c.detail.data.unformatted_phone_number,
                        formatted_phone: c.detail.data.formatted_phone_number,
                        email: c.detail.data.email,
                        showDetails: false
                    }
                });
            });
    }
});

添加和检索公司来自两条不同的路线。用于添加与检索数据不同的控制器的模态组件。

export default Ember.Controller.extend({
    clearProperties: function(){
        this.setProperties({
            username: "",
            email: "",
            password: ""
        });
    },

    actions:{
        addCompany: function(){
            var self = this;
            var data = self.getProperties('all my properties');

            $.post('http://localhost:8000/api/v1/company/add-company', data).then(function(response){
                console.log(response);
            });

            self.clearProperties();
        }
    }
});

我是否可以运行以某种方式刷新DOM的功能?那么ember向服务器发出新请求并更新DOM?或者我可以手动将记录添加到模型中吗?和灰烬会自动捕捉到它吗?

在我的ajax调用之后,我尝试这样做:

this.get('model').push({
                name: data.name,
                address: data.address,
                city: data.city,
                state: data.state
            });

没有好处。

1 个答案:

答案 0 :(得分:0)

所以这里的问题是你正在处理POJO并且你应该处理Ember.Object如果更新POJO,手把不能识别这种变化。如果您更新名为Ember.Object的{​​{1}}并且您在把手模板中将其显示为object,则更新{{object.someProp}}会导致重新呈现,因为someProp会延长实现了Ember.Object mixin和双向绑定。

此外,当您向Observable添加项目时,即Ember.A,请使用Ember.Array而不是pushObject才能触发push。我也没有使用Ember数据,但出于这个原因,我的所有服务都返回updateEmber.Object数组。

因此,在Ember.Object中创建一个名为company的模型对象:

models/company.js

并使用import Ember from 'ember'; export default Ember.Object.extend({ name: null, slug: null, //... all other properties }); 方法:

findAll

您可以重新分配模型,以便在解决该承诺时调用import Company from 'app_name/models/company'; export default Ember.Object.extend({ findAll: function(){ return ajax('http://localhost:8000/api/v1/companies?includes=detail') .then(function(response){ return response.data.map(function(c){ return Company.create({ name: c.name, slug: c.slug, address: c.detail.data.address, city: c.detail.data.city, state: c.detail.data.state, country: c.detail.data.country, zip_code: c.detail.data.zip_code, unformatted_phone: c.detail.data.unformatted_phone_number, formatted_phone: c.detail.data.formatted_phone_number, email: c.detail.data.email, showDetails: false }); }); }); } }); ,或者:

findAll