我的模特应该用什么?

时间:2013-09-05 17:24:05

标签: ember.js

我有一个适用于此模型结构的模板:

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会起作用。

2 个答案:

答案 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');