2013-08-30 28 views
0

我在玩todos.js backbone.js演示。用backbone.js读取多个输入

在演示中,他们有他们需要的数据在初始化函数像这样的文本框中输入:

<input id="new-todo" type="text" placeholder="Todo item..."> 

initialize: function() { 

     this.input = this.$("#new-todo"); 

我的问题是,将有可能从3输入文本框,而不是采取数据只有一个?

我可以试试这个,但是这似乎并没有规模非常好:

<input id="new-todo1" type="text" placeholder="Todo item..."> 
<input id="new-todo2" type="text" placeholder="Todo item..."> 
<input id="new-todo3" type="text" placeholder="Todo item..."> 

初始化:函数(){

this.input = this.$("#new-todo1"); 
    this.input =+ this.$("#new-todo2"); 
    this.input =+ this.$("#new-todo3"); 

有没有更好的办法?

感谢

+1

这不是“取数据”,它简单地缓存视图属性内的jQuery对象 –

回答

1

我假设你想从多个输入中取值,并将它们作为标题放入待办事项中。我建议存储引用输入在初始化有:

initialize: function() { 
    this.input = this.$("#new-todo"); 
    ... 
} 

而且createOnEntermethod应该变成这样:

createOnEnter: function(e) { 

    //concatenate the values from all inputs 
    var val = ""; 
    this.input.each(function() { 
    val += ($(this).val()); 
    }); 

    if (e.keyCode != 13) return; 
    if (!val) return; 

    Todos.create({title: val}); 

    //reset all the input elements 
    this.input.each(function() { 
    $(this).val(''); 
    }); 
} 

输入元素都应该有相同的ID - “新待办事项”。

1

我不是很有经验的Backbone.js的,但你可以通过所有的投入使用jQuery的每一个循环,并得到他们的价值。

1

如果您有:

<input class="todo" type="text" placeholder="Todo item..."> 
<input class="todo" type="text" placeholder="Todo item..."> 
<input class="todo" type="text" placeholder="Todo item..."> 

然后

initialize: function() { 

    this.$inputs = this.$(".todos"); 

将缓存这些输入(如你所说拿不到值)。 然后

this.$inputs.each(function() { 
    console.log($(this).val()); 
}); 

将打印他们的价值观,或者你可以把它们的值在数组中,像这样:

var values = this.$inputs.map(function() { 
    return $(this).val(); 
}); 

那么你可以做一个串出这些值与

values.join(' '); 

或者您可以使用Underscorereduce增加款式点数:

var string = _(this.$inputs).reduce(function(memo, el) { 
    return memo + ' ' + $(el).html(); 
}, '');