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-data,也许 Ember.Object 会起作用。

4

2 回答 2

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 对象进行操作!

于 2013-09-05T18:17:23.487 回答
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');
于 2013-09-05T19:40:41.907 回答