将Ember.TextField值绑定到另一个Controller的属性

时间:2012-11-05 10:45:13

标签: model-view-controller ember.js

我的index.html说:

 <script type="text/x-handlebars" data-template-name="loggedout">
 <label>Username: </label>{{view Ember.TextField placeholder="your username"  valueBinding="App.LoggedoutController.username"}}<br />
 <label>Password: </label>{{view Ember.TextField placeholder="your password" valueBinding="App.LoggedoutController.password" type="password"}}<br />
 <br /><button {{action login}}>Login</button>
 </script>

操作进入我的路由器,重定向到我的控制器

 App.LoggedoutController = Ember.Controller.extend({

    username: '',
    password: '',
    isError: false,

    tryLogin: function() {
      console.log("InController: launched");
      var username = this.get("username");
      console.log("Check:" + username);
      ....

但是检查是空的。

Fiddle

3 个答案:

答案 0 :(得分:2)

如果你在路由器中调用“connectOutlet”,那么你不必担心App.loggedOutController位(从MVC的角度来看,最好尽可能地将“App。”保留在模板之外)

      loggedOut: Ember.Route.extend
      route: '/signin'
      connectOutlets: (router) ->
        router.get("applicationController").connectOutlet 'loggedOut'

然后在你的模板中你可以简单地:

{{view Ember.TextField placeholder="your username"  valueBinding="username"}}

答案 1 :(得分:1)

valueBinding中的路径App.LoggedoutController.username是错误的。使用App.LoggedoutController,您将使用Ember.Controller.extend()引用已定义的类。您可能在代码中的某处使用过App.intialize()。这会导致Controller由框架实例化。然后,您可以使用路径App.router.loggedoutController检索它。

请记住:实例的名称始终以小写字母开头。课程总是大的。

所以解决方法是:使用valueBindung =“App.router.loggedoutController.username”

编辑:您的小提琴不起作用,因为您没有链接所需的ember库。在“添加资源”中查看左侧。在那里你必须为Ember和Handlebars JS文件指定正确的URL。

答案 2 :(得分:1)

问题在于camelCasing&amp;使用router关键字,你没有路由器int绑定... 你用过 App.outController.username
而不是App.router.outController.username
这是工作fiddle