Javascript 在Parse JS API(backbone.JS)视图模板中呈现的不仅仅是模型属性

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的原因)。我希望有一个视图可以找到当前用户跟随的所有用户,并为每个案

因此,我尝试使用联接表在我的解析应用程序中显示数据列表。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>