0

我在一段主干代码上遇到了一些麻烦。下面的代码与渲染函数有关。我可以检索所有模型。当我尝试在第 1 行标记处使用“Collections.where”方法时,我的麻烦就出现了。如您所见,我已将对象文字传递给渲染函数,但由于某种原因,我无法在第 1 行的 customers.where 方法中引用它。当我给这个方法一个像 45 这样的字面数字时,它就起作用了。有没有办法解决这个问题,所以我可以传递变量引用?

非常感谢

render: function(options) {

    var that = this;
    if (options.id) {

        var customers = new Customers();
        customers.fetch({
            success: function (customers) {
   /* #1 --> */ var musketeers = customers.where({musketeerId: options.id});
                console.log(musketeers.length) //doesn't work as options.id is failing on last line
                var template = _.template($('#customer-list-template').html(), {
                    customers: customers.models
                });
                that.$el.html(template);
                console.log(customers.models);
            }
        });

    } else {
        var template = _.template($('#customer-list-template').html(), {});
        that.$el.html(template);
    }
}
4

1 回答 1

2

尽管没有明确记录,但在搜索时Collection#where使用严格相等 ( ===) 。精美的源代码

where: function(attrs, first) {
  if (_.isEmpty(attrs)) return first ? void 0 : [];
  return this[first ? 'find' : 'filter'](function(model) {
    for (var key in attrs) {
      if (attrs[key] !== model.get(key)) return false;
    }
    return true;
  });
},

请注意attrs[key] !== model.get(key)回调函数内部,它不会将10(a probable idvalue) 和'10'(a probable search value 从 an 中提取<input>) 视为匹配项。这意味着:

customers.where({musketeerId: 10});

可能会找到一些东西,而:

customers.where({musketeerId: '10'});

惯于。

您可以通过以下方式解决此类问题parseInt

// Way off where you extract values from the `<input>`...
options.id = parseInt($input.val(), 10);
于 2013-03-30T05:00:30.780 回答