我遇到了一段骨干代码的问题。下面的代码涉及渲染功能。我可以检索所有模型。当我尝试在标记为#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);
}
}
答案 0 :(得分:2)
虽然未明确记录,但Collection#where
在搜索时使用strict equality (===
)。来自fine source code:
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
(可能的id
值)和'10'
(从{提取的可能搜索值) {1}})成为一个匹配。这意味着:
<input>
可能会找到一些东西而不是:
customers.where({musketeerId: 10});
不会。
你可以使用parseInt
来解决这类问题:
customers.where({musketeerId: '10'});