2013-09-05 235 views
0

我有一个模板,与此模型结构的工作原理:我应该使用什么模型?

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会工作。

回答

1

不需要使用余烬数据(直到最终),因此您可以使用基本的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; 
}}; 

记住使用灰烬API修改喜欢这款机型的性能:

Ember.set(imageModel,'name','hereIsTheNewName'); 

所以灰烬将无处不在更新的意见。

如果你想获取来自服务器的数据,然后使用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承诺对象进行操作!

+0

我现在爱你。 – sherlock

+0

已更新的答案显示如何从服务器加载数据 –

+0

如何一次设置多个属性? – sherlock

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'); 
+0

如果其他路由或控制器使用相同的对象会怎么样? –

+0

您能解释一下“解决方案”假设要做什么? –

+0

解析是让ember知道数据已成功加载的函数。如果我们没有调用resolve(),Ember将永远等待。 –