我有一条路线用于创建新文档,复制现有文档。
App.DocumentsNewRoute = Ember.Route.extend({
model: function (params) {
this.modelParams = params; // save params for reference
return App.Document.createRecord();
},
setupController: function (controller, model) {
// use the params to get our reference document
var documentModel = App.Document.find(this.modelParams.document_id);
documentModel.one('didLoad', function () {
// once loaded, make a serialized copy
var documentObj = documentModel.serialize();
// and set the properties to our empty record
model.setProperties(documentObj);
console.log('didLoad');
});
}
});
我在视图中添加了一些日志。
App.DocumentView = Ember.View.extend({
init: function () {
this._super();
// fires before the didLoad in the router
console.log('init view');
},
willInsertElement: function () {
// fires before the didLoad in the router
console.log('insert elem');
}
});
这是我的模板
{{#if model.isLoaded }}
{{ view App.DocumentView templateNameBinding="model.slug" class="document portrait" }}
{{ else }}
Loading...
{{/if}}
看起来问题是我的模型isLoaded
,但是在我的模板被渲染时没有填充,所以此时templateNameBinding不存在,并且在填充数据时似乎没有更新
我应该在模板中使用除了model.isLoaded以外的其他东西,还是应该强制重新渲染我的模板,如果是,那么如何以及在哪里?谢谢!
答案 0 :(得分:0)
看起来你过于复杂了。它应该是:
我在第一次阅读时误解了你的问题,所以
App.DocumentsNewRoute = Ember.Route.extend({
model: function (params) {
var originalDoc = App.Document.find(params.document_id),
newDoc = App.Document.createRecord();
originalDoc.one('didLoad', function () {
newDoc.setProperties(this.serialize());
});
return newDoc;
},
setupController: function (controller, model) {
controller.set('content', model);
}
});
如果一切正常,ember将自动重新渲染...