我至少暂时没有使用余烬数据。我想知道如何在创建新记录后更新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
});
没有好处。
答案 0 :(得分:0)
所以这里的问题是你正在处理POJO并且你应该处理Ember.Object
如果更新POJO,手把不能识别这种变化。如果您更新名为Ember.Object
的{{1}}并且您在把手模板中将其显示为object
,则更新{{object.someProp}}
会导致重新呈现,因为someProp
会延长实现了Ember.Object
mixin和双向绑定。
此外,当您向Observable
添加项目时,即Ember.A
,请使用Ember.Array
而不是pushObject
才能触发push
。我也没有使用Ember数据,但出于这个原因,我的所有服务都返回update
或Ember.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