我有一个适用于此模型结构的模板:
App.BuildingRoute = Ember.Route.extend({
model: function() {
return {
imgSrc: 'img/Images/44.png',
name: 'name',
addr1: 'Address Line 1',
addr2: 'Address Line 2'
}
}
}
但我需要这些数据能够更新并且来自我们的服务器。所以我尝试了这个:
App.BuildingData = DS.Model.extend({
imgSrc: 'img/Images/44.png',
name: 'name',
addr1: 'Address Line 1',
addr2: 'Address Line 2'
});
App.BuildingRoute = Ember.Route.extend({
model: function() {
var store = this.get('store');
var stuff = store.find('BuildingData');
return stuff;
}
}
我得到了一堆错误。有一个简单的例子,说明如何建立一个可以通过程序中其他地方的函数更新的模型吗?
我有一个函数getNodeInfo()
,它从我们的服务器获取数据并返回如下内容:
{
imgSrc: 'img/Images/44.png',
name: 'name',
addr1: 'Address Line 1',
addr2: 'Address Line 2'
}
我应该从哪里调用getNodeInfo()
,我把它放在模型函数中,但也有错误。
我甚至不知道我是否需要使用余烬数据,也许Ember.Object会起作用。
答案 0 :(得分:1)
无需使用ember数据(直到最终),因此您可以使用基本的javascript变量或数组来为您提供模型。但是你应该把这个变量放在全局上下文中,所以试着这样做:
var imageModel = {
imgSrc: 'img/Images/44.png',
name: 'name',
addr1: 'Address Line 1',
addr2: 'Address Line 2'
};
App.BuildingRoute = Ember.Route.extend({
model: function() {
return imageModel;
}};
请记住使用Ember API修改模型的属性,如下所示:
Ember.set(imageModel,'name','hereIsTheNewName');
所以Ember会在任何地方更新视图。
如果要从服务器获取数据,请使用jQuery.ajax调用:
App.BuildingRoute = Ember.Route.extend({
model: function() {
return $.get('/your/app/url').then(function(data){
//suppose your server returns JSON
imageModel = data;
return imageModel;
});
}};
那么它显示了什么? Ember可以使用javascript promise对象进行操作!
答案 1 :(得分:0)
Didar的解决方案有效,但是如果你想使用Ember的LoadingRoute并消除不必要的全局变量,那么它就是:
App.BuildingRoute = Ember.Route.extend({
model: function() {
return Ember.RSVP.Promise(function(resolve) {
$.getJSON('/app/url', function(data) {
resolve(Ember.Object.create(data));
});
});
}
});
想要更改房产?只需在您的路线或控制器中获取模型。
this.get('model').set('name', 'My New Name');