Ember.js 视图绑定
我有一个简单的应用程序,您可以在其中登录它看起来像这样:Ember.js 视图绑定,ember.js,Ember.js,我有一个简单的应用程序,您可以在其中登录它看起来像这样: {{#view App.mainV}} {{#if logged}} Hey! {{else}} <!-- Login form here when clicked: App.mainC.login()--> {{/if}} {{/view}} 这里是mainV: App.mainV = Ember.View.extend({ logged: false, test: functio
{{#view App.mainV}}
{{#if logged}}
Hey!
{{else}}
<!-- Login form here when clicked: App.mainC.login()-->
{{/if}}
{{/view}}
这里是mainV:
App.mainV = Ember.View.extend({
logged: false,
test: function()
{
console.log('JO');
}
});
关于此应用程序,我有两个问题:
- 为什么当我将日志更改为true view时不会更改
- 如果调用App.mainV.test(),我会得到一个错误。为什么? TypeError:“App.mainV.test”不是函数
{{{If view.logged}
您不能执行App.mainV.test()
,因为App.mainV
是一个类,而不是一个实例。您可以执行App.mainV.create().test()
您应该将App.mainV
重命名为App.mainV
,以符合Ember.js惯例(类名应大写,请参阅)
编辑:
在您的示例中还有另一个问题:控制器试图修改视图中的值。以余烬方式,您应该将视图的属性绑定到控制器。控制器中的任何更改都将传播到视图:
<script type="text/x-handlebars">
{{#view App.MainView}}
{{#if view.logged}}
Hey!
{{else}}
<!-- Login form here when clicked: App.mainController.login()-->
{{/if}}
{{/view}}
</script>
App = Ember.Application.create();
App.mainController = Ember.Controller.create({
logged: false,
login: function() {
this.set('logged', true);
}
});
App.MainView = Ember.View.extend({
loggedBinding: 'App.mainController.logged'
});
// change in controller will be propagated to the view
App.mainController.set('logged', true);
{{{#view App.MainView}
{{{#if view.logged}
嘿!
{{else}
{{/if}
{{/view}
App=Ember.Application.create();
App.mainController=Ember.Controller.create({
记录:false,
登录:函数(){
此.set('logged',true);
}
});
App.MainView=Ember.View.extend({
loggedBinding:'App.mainController.logged'
});
//控制器中的更改将传播到视图
App.mainController.set('lo(对),;
我可以访问“logged”,但当它被更改时,视图不会更新。我最近遇到了这样一个问题,但为了最小化耦合,我需要从视图到控制器的相对绑定,即loggedBinding:'controller.logged'
。这不起作用(尽管我不知道为什么)。相反,我发现有效的方法是在视图中设置computed属性:logged:Ember.computed.alias('controller.logged')
<script type="text/x-handlebars">
{{#view App.MainView}}
{{#if view.logged}}
Hey!
{{else}}
<!-- Login form here when clicked: App.mainController.login()-->
{{/if}}
{{/view}}
</script>
App = Ember.Application.create();
App.mainController = Ember.Controller.create({
logged: false,
login: function() {
this.set('logged', true);
}
});
App.MainView = Ember.View.extend({
loggedBinding: 'App.mainController.logged'
});
// change in controller will be propagated to the view
App.mainController.set('logged', true);