Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ember.js 视图绑定_Ember.js - Fatal编程技术网

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('lo​gged', 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('lo​gged', true);​​​​​​