您何时会使用{{render "viewGoesHere" content}}
vs {{view App.viewGoesHereView contentBinding="this"}}
?
我尝试动态更改要在侧栏菜单中的不同链接点击时呈现的模板。但是,只有在第一次点击链接(来自侧边栏)时,上述两种方法才会更改为正确的模板。之后点击的任何链接都会生成与第一次生成的模板相同的模板。
tl; dr:当点击侧栏中的不同链接时,我的模板不会动态更改。
以下是我的观点:
App.ViewGoesHereView = Ember.View.extend({
templateName: function(){
var templateName = 'baseTemplate';
var value = this.get('controller.model.Name');
if (Ember.compare(value, 'abc') === 0) {
templateName = 'abcTemplate';
return templateName;
}
else if (Ember.compare(value, 'xyz') === 0) {
templateName = 'xyzTemplate';
return templateName;
}
return templateName;
}.property('controller.model.Name'),
});
我基本上是根据当前模型中的Name获取正确的模板,我可以在templateName变量中获取正确的名称,但它不会渲染。
答案 0 :(得分:0)
我意识到,每次点击侧边栏的新链接时,value ('controller.model.Name')
都不会更新。所以我插入了一个jquery函数来获取每次点击的更新名称,并将其分配给值变量。
App.ViewGoesHereView = Ember.View.extend({
templateName: function(){
var templateName = 'baseTemplate';
var val = this.get('controller.model.Name');
var value;
$(document).ready(function () {
$('li').click(function () {
val = ($(this).text());
});
});
value = val;
if (Ember.compare(value, 'abc') === 0) {
templateName = 'abcTemplate';
return templateName;
}
else if (Ember.compare(value, 'xyz') === 0) {
templateName = 'xyzTemplate';
return templateName;
}
return templateName;
}.property('controller.model.Name'),
});
答案 1 :(得分:0)
在您的代码示例中,您尝试将templateName
属性连接到controller.model.Name
这种方法第一次有效,正如您所说,但是templateName
属性由ember视图首先使用只有时间。即,如果在呈现视图后templateName
发生更改,则它不会重新呈现视图。如果您希望自己的方法有效,则每次依赖属性发生变化时都需要重新渲染视图。
//sample
App.ViewGoesHereView = Ember.View.extend({
templateName: function(){
var templateName = 'baseTemplate';
var value = this.get('controller.model.Name');
if (Ember.compare(value, 'abc') === 0) {
templateName = 'abcTemplate';
return templateName;
}
else if (Ember.compare(value, 'xyz') === 0) {
templateName = 'xyzTemplate';
return templateName;
}
return templateName;
}.property('controller.model.Name'),
//new property to re-render the view
reRenderView: function () {
this.rerender();
}.observes('controller.model.Name')
});
注意:我没有测试过这段代码,因为我没有完整的用例。如果这不起作用,请回复。