Javascript 在Parse JS API(backbone.JS)视图模板中呈现的不仅仅是模型属性
因此,我尝试使用联接表在我的解析应用程序中显示数据列表。javascript API与backbone.js非常相似,我想知道的人都可以帮助我。我无法显示我的实际源代码,但我想我可以用类似于twitter的简单“用户跟随用户”场景来回答我的问题。因此,假设我有一个名为“follows”的联接表,它只包含自己的objectId、关系中每个用户的id以及一些关于关系的元数据(需要元数据是我使用联接表而不是Parse.Relation的原因)。我希望有一个视图可以找到当前用户跟随的所有用户,并为每个案例呈现另一个视图的实例。从目前为止的情况来看,这看起来像这样Javascript 在Parse JS API(backbone.JS)视图模板中呈现的不仅仅是模型属性,javascript,backbone.js,parse-platform,backbone-views,Javascript,Backbone.js,Parse Platform,Backbone Views,因此,我尝试使用联接表在我的解析应用程序中显示数据列表。javascript API与backbone.js非常相似,我想知道的人都可以帮助我。我无法显示我的实际源代码,但我想我可以用类似于twitter的简单“用户跟随用户”场景来回答我的问题。因此,假设我有一个名为“follows”的联接表,它只包含自己的objectId、关系中每个用户的id以及一些关于关系的元数据(需要元数据是我使用联接表而不是Parse.Relation的原因)。我希望有一个视图可以找到当前用户跟随的所有用户,并为每个案
var currentUser = Parse.User.current();
var followsQuery = new Parse.Query(Follows);
followsQuery.equalTo("userId", currentUser.id);
followsQuery.find({
success: function(followsResult){
for (var i = 0; i < followsResult.length; i++){
var view = new OneFollowView({model:followsResult[i]});
this.$("#followed-list").append(view.render().el);
}//for loop
},
error: function(error){
console.log("error finding plans query");
}
});
在顶层视图的初始化(我们称之为AllFollowsView)中,我会有这样的内容
var currentUser = Parse.User.current();
var followsQuery = new Parse.Query(Follows);
followsQuery.equalTo("userId", currentUser.id);
followsQuery.find({
success: function(followsResult){
for (var i = 0; i < followsResult.length; i++){
var view = new OneFollowView({model:followsResult[i]});
this.$("#followed-list").append(view.render().el);
}//for loop
},
error: function(error){
console.log("error finding plans query");
}
});
我可以在OneFollowsView模板中打印该模型的属性,如下所示
<li>You are following a user with the id of <%= _.escape(followedUserId) %></li>
下面是下部(单个li)视图的渲染
据我所知,这只是在将模型解析为JSON时将模板呈现给el,然后返回以允许链式调用。这里的问题在于您的
呈现方法。在渲染方法中调用此.template
时。该方法,this.template
是通过调用函数返回的模板函数。调用this.template
方法时,传入的对象属性将作为模板中的实例变量可用。
在本例中,您将传入对象的JSON。因此,模型的属性成为模板中可用变量的名称。如果您想向模板公开其他变量,您有两个选项:1)添加到jsonified模型的属性。2) 将模型作为顶级变量和您可能需要的任何其他变量发送
// option 1
render: function() {
var templateArgs = _.extend(this.model.toJSON(), { additionalVar: 'new var' });
var content = this.template(templateArgs);
$(this.el).html(content);
this.delegateEvents();
return this;
}
// option 2
render: function() {
var templateArgs = {
followResult: this.model.toJSON(),
additionalVar: 'new var'
};
var content = this.template(templateArgs);
$(this.el).html(content);
return this;
this.delegateEvents();
}
这两种选择都是合理的。我可能会选择方案2。这允许您在模板中说:
<li> <%= followResult.someProperty %> <%= additionalVar %> </li>
希望有帮助。:) 你能发表你的观点吗。我对检查您的渲染方法感兴趣。:)一般来说,当你编译模板时,你需要传入所有将在模板中使用的变量。我可以用它传入虚拟变量,所以这绝对是一个开始。在保存查询得到的对象时遇到了一些问题,这些对象是我可以传入的变量的查询结果,但这对于另一个线程来说是另一回事。非常感谢!没问题。很乐意帮忙。
// option 1
render: function() {
var templateArgs = _.extend(this.model.toJSON(), { additionalVar: 'new var' });
var content = this.template(templateArgs);
$(this.el).html(content);
this.delegateEvents();
return this;
}
// option 2
render: function() {
var templateArgs = {
followResult: this.model.toJSON(),
additionalVar: 'new var'
};
var content = this.template(templateArgs);
$(this.el).html(content);
return this;
this.delegateEvents();
}
<li> <%= followResult.someProperty %> <%= additionalVar %> </li>