0

我正在玩 todos.js 主干.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");

有没有更好的办法?

谢谢

4

3 回答 3

1

我对 Backbone.js 不是很有经验,但您可以使用 jQuery 来遍历所有输入并获取它们的值。

于 2013-08-30T16:30:26.367 回答
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(' ');

或者您可以使用Underscore'sreduce来获得额外的样式点:

var string = _(this.$inputs).reduce(function(memo, el) {
  return memo + ' ' + $(el).html();
}, '');
于 2013-08-30T16:31:31.480 回答
1

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

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

并且createOnEnter 方法应该变成这样:

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 - “new-todo”。

于 2013-08-30T16:40:55.663 回答