2014-10-05 90 views
2

是什麼在灰燼路由使用模型鉤之間的區別:對戰創建自己的灰燼對象灰燼模型掛鉤({})

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

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; 
     } 
    }); 
    } 
}); 

爲什麼你會用另一個呢?

回答

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

+0

不Ember.Object.extend({})等待異步也完成? – redconservatory 2014-10-06 00:57:24

+1

Ember.Object.extend({})沒有異步代碼,它是聲明。 – Kingpin2k 2014-10-06 02:58:00

1

兩者是完全不同的。 Ember路線上的model是一個掛鉤哪些內容讓你(從api獲取數據並創建一個包含控制器需要的數據的對象等等)返回一個承諾,該承諾將被解析爲路由控制器的模型,所述路線被輸入並轉換成。另一方面,App.MyModel = Em.Object.extend({})創建一個類,它只是一個模板,可以從中實例化App.MyModel實例的對象。 如果您的應用程序要模擬用戶,例如,它會在用戶「模式」像

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

鉤子和模板(類)有什麼區別?鉤子是否僅在生命週期中出現一次? – redconservatory 2014-10-06 00:35:10

+0

DS.attr不會在Ember對象上定義。 – Kingpin2k 2014-10-06 02:56:21

+0

@Kingpin你是對的。編輯:) – Hrishi 2014-10-06 04:12:06