在持久性烬之后更新dom
update dom after persistence emberjs
至少目前我不使用ember-data。我想知道如何在我创建一个新记录后更新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?或者我可以手动向模型添加一条记录吗?ember会自动捕获它吗?
我尝试在ajax调用后这样做:
this.get('model').push({
name: data.name,
address: data.address,
city: data.city,
state: data.state
});
。
所以这里的问题是您正在处理POJO,而您应该在Ember.Object
中处理。如果您更新了POJO,手柄无法识别此更改。如果你更新一个叫做object
的Ember.Object
,并且你在车把模板中将其显示为{{object.someProp}}
,那么更新someProp
将导致渲染,因为Ember.Object
扩展了Observable
mixin并且实现了双向绑定。
另外,当你添加项目到Ember.A
,即Ember.Array
,使用pushObject
而不是push
,以触发update
。我也不使用Ember数据,但出于这个原因,我的所有服务都返回Ember.Object
或Ember.Object
的数组。
在models/company.js
中创建一个名为company的模型对象:
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
的新调用,或者:
this.get('model').pushObject(Company.create({
name: data.name,
address: data.address,
city: data.city,
state: data.state
}));
相关文章:
- 从angularjs中的javascript更新dom
- Javascript没有't更新DOM,直到用户交互
- 如何让React JS点击处理程序在执行时更新DOM
- Ionic:AngularJS变量未使用$scope更新DOM
- 使用Javascript通过ajax回调更新DOM
- Angular JS根据搜索结果和点击事件更新DOM元素
- 我如何告诉javascript立即更新DOM
- 引导复选框-x 选中时未正确更新 DOM - 如何验证表单
- 通过Javascript重复更新DOM后,网页变得很慢
- jQuery更新DOM并运行change()方法
- 使用Angular Directive用$scope属性更新DOM-只要指令运行(无需等待事件)
- AngularJS:在长时间循环期间强制更新DOM(即进度指示器)
- Polymer:当数组中的对象被外部代码修改时,更新dom重复元素
- Javascript 复杂的附加和更新 DOM,因此可以使用 remove(); 将其删除
- ng-show 不更新 DOM 元素
- 浏览器如何从内部HTML属性更新DOM
- 更新 DOM 中的标签
- 是否有模板引擎可以在数据更改时更新 DOM
- 在 AngularJS 中使用从 websockets 动态获取的外部 JSON 数据自动更新 DOM
- 更新 DOM 后“鼠标向上”出现问题