需要澄清Ember {{input}}在获取值时的工作原理

时间:2014-04-13 21:01:11

标签: ember.js

我有以下表格和控制器:

<form {{action loadList on="submit"}}>
    {{input value=subreddit id="subreddit" placeholder="Subreddit" required="true"}}
    <button type="submit">Go!</button>
</form>

控制器:

App.IndexController = Ember.ObjectController.extend( {

    subredditHeader: "aww",

    loadList: function() {

        var value = this.get('subreddit');

        if (value) {

            this.set('subredditHeader', value);         
            this.set( 'model',  App.RedditLink.findAll( value ) );

            // Clear out the input field
            this.set('subreddit', '');

        }
    }
});

基本上,在提交时,它调用 loadList(),它使用 this.get()来获取输入字段的值,然后调用我的静态方法模型来拉回数据。这个现在工作正常。

似乎 value = subreddit 类似于 valueBindings =“subreddit”(告诉我,如果我错了)。

我的问题是为什么我不能这样做:

{{input value="" name="subreddit" id="subreddit" placeholder="Subreddit" required="true"}}

value 属性为空。

当我尝试它时, var value = this.get('subreddit'); 不会返回我在字段中输入的值。事实上,调试器说它是未定义的。

1 个答案:

答案 0 :(得分:0)

Ember将值绑定到上一个中的subreddit。如果将值保留为空,则它不受约束,并且由于控制器中没有任何名为subreddit的内容,因此未定义。试试这个:

App.IndexController = Ember.ObjectController.extend( {
  myInputValue: '';
  loadList: function() {
    var value = this.get('myInputValue');
    // Other things
  }
})

在模板中:

{{input value=myInputValue name="subreddit" id="subreddit" placeholder="Subreddit" required="true"}}

这有效,但通常最好将值绑定到模型的属性。