- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个例子,我需要根据 Controller 的初始属性值选择 View 的模板。因此,当我位于 View 的 init Hook 内时,我需要访问 Controller ,但是当我访问 Controller 时,它返回“null”。
MyApp.ApplicationController = Em.Controller.extend({
templateVersion: 'small'
});
MyApp.ApplicationView = Em.View.extend({
init: function(){
this._super();
console.log('Controller is: ',this.get('controller'));
if(this.get('controller').get('templateVersion') == 'small')
{
this.set('templateName', 'application-small');
} else {
this.set('templateName', 'application-bigger');
}
}
});
这不是真实案例,而是真实场景的示例。例如,我设置了一个 jsbin here
最佳答案
我想更合适的方法是动态确定 templateName
,如下所示:
MyApp.ApplicationView = Ember.View.extend({
templateName: function() {
if (this.get("controller.templateVersion") == "small") {
return "application-small";
} else {
return "application-bigger";
}
}.property('controller.templateVersion')
});
这样做,您不需要挂接到 init
函数,因此您的 Controller 属性不可用。
这里是您的更新jsbin .
在您最后发表评论后,我意识到延迟是使您的用例正常工作的重要部分,这是一个改进的版本,即使templateVersion
是,它确实会发生变化最初未定义并且设置有一些延迟,这次我们观察 View 的 templateName
属性并调用 rerender
。
MyApp.ApplicationView = Ember.View.extend({
templateName: function() {
if (this.get("controller.templateVersion") == "small") {
return "application-small";
} else {
return "application-bigger";
}
}.property('controller.templateVersion'),
templateChanged: function() {
this.rerender();
}.observes('templateName')
});
这是另一个jsbin新版本的模拟延迟为 2 秒,但它可以是任何值。
希望有帮助。
关于javascript - 我们可以在 View 的 init 钩子(Hook)内访问 View 的相应 Controller 吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18010979/
我在 Java 中遇到异常处理问题,这是我的代码。当我尝试运行此行时出现编译器错误:throw new MojException("Bledne dane");。错误是: exception MojE
我刚刚开始学习asp.net。在你们的支持下,我希望我能从这个论坛学到更多东西。 我的问题是, 我在 asp.net 页面中有一个 TabContainer1,因为每个选项卡面板中有多个类似 (60)
我是一名优秀的程序员,十分优秀!