在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;
}
});
}
});
为什么要使用一个而不是另一个?
答案 0 :(得分:1)
一个是工作流程的一部分,另一个是课程。
模型钩子将在访问路线时提供路线模型(在这种情况下为照片)。此外,它将等待异步调用完成并使用ajax调用的结果。
扩展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'));
答案 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
});