我有一个包含一个模型的集合。在我的模板中我应该能够执行以下操作:
<% _.each(collection, function(model) { %>
<p>logged in <%= model.username %>!</p>
<% }); %>
但我发现我需要做:
<% _.each(models, function(model) { %>
<p>logged in <%= model.attributes.username %>!</p>
<% }); %>
我不确定到底是什么问题,但模型没有正确填充。任何人都知道为什么会发生这种情况以及如何在模型中设置值,以便我可以循环模型集合并仅使用 model.username 访问值?
提前谢谢您。
这是我的模型和收藏:
var AccountModel = Backbone.Model.extend({
defaults:
{
username: "bob"
}
});
var AccountCollection = Backbone.Collection.extend(
{
model: AccountModel,
url: "/php/account-details.php",
parse: function(data, xhr)
{
return data
},
initialize: function()
{
}
});
这是我的获取函数:
fetchAccountCollection: function(){
var $this = this;
$this.homepageAccountCollection = new AccountCollection();
$this.homepageAccountCollection.fetch(
{
dataType: "json",
cache: false,
success: function(collection)
{
Backbone.trigger('accountcollection:loaded', collection);
},
error: function()
{
console.log("fetchAccountCollection: error");
}
});
},
当成功函数被调用时,触发器将调用 Controller 内的渲染函数:
renderAccount: function(collection)
{
var $this = this;
$this.loginPageView = new LoginView(
{
el: '#login-form',
template: 'loggedin-template',
collection: collection
});
$this.loginPageView.render();
},
当$this.loginPageView.render();时调用后会执行以下代码:
render: function()
{
var collection = this.options.collection;
var tpl = _.template($(this.options.template).html(), collection);
this.$el.html(tpl);
return this;
},
用户名的值是从 PHP 脚本返回的,如下所示:
$array=array('username' => $user['username']);
echo json_encode($array);
最佳答案
Underscore 的 each
方法(以及许多其他方法)直接混合到集合中。使用 collection.each(function () { ... })
而不是 _.each(collection ...)
。
关于javascript - Backbone JS 正确填充模型/集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20830939/