Route与Ember.Object.extend({})中的Ember模型钩子

时间:2014-10-05 15:18:11

标签: ajax ember.js

在Ember Route中使用模型钩子有什么区别:

App.PhotoRoute = Ember.Route.extend({
  model: function(params) {
    return Ember.$.getJSON('/photos/'+params.photo_id);
  }
});

创建自己的Ember对象?

    App.PhotoModel = Ember.Object.extend({});
    App.PhotoModel.reopenClass({
    find: function(id){
       $.ajax({
      url: 'https://www.go.get.my.photo',
      dataType: 'jsonp',
      data: { id: id },
      success: function(response){
        return response.data;
      }
    });
  }
});

为什么要使用一个而不是另一个?

2 个答案:

答案 0 :(得分:1)

一个是工作流程的一部分,另一个是课程。

模型钩子将在访问路线时提供路线模型(在这种情况下为照片)。此外,它将等待异步调用完成并使用ajax调用的结果。

示例:http://emberjs.jsbin.com/

扩展Ember.Object将定义一个可重用性的类。它是整个Ember框架的重要组成部分。

App.MyModelObject = Ember.Object.extend({});

更有用的例子是

App.MyModel = Ember.Object.extend({
  total: function(){
    return this.get('val1') + this.get('val2');
  }.property('val1', 'val2')
});

var foo = App.MyModel.create({val1:3, val2:5});

console.log(foo.get('total'));

示例:http://emberjs.jsbin.com/xinozi/1/edit

答案 1 :(得分:1)

两者完全不同。 Ember路由上的model是一个 hook ,它使用ember(从api获取数据并创建一个保存控制器所需数据的对象等)返回一个获取的promise当进入并转换到所述路线时,解析到路线的控制器模型。另一方面,App.MyModel = Em.Object.extend({})创建一个类,它只是一个模板,可以从中实例化App.MyModel实例的对象。 例如,如果您的应用程序想要为用户建模,那么它将拥有一个用户" model"像

App.User = Em.Object.extend({username: 'Alice'})

或类似的东西。但是,如果您的用户路线看起来像/#/user/id,那么路线上的模型挂钩将是这样的

model: function(params) {
  return new Ember.RSVP.Promise(function(success, failure) {
    //make an ajax call and invoke the success and failure handles here appropriately
  });