Javascript Rendr如何在RendrJS同构框架中将模型传递到子视图
假设我正在构建一个博客,其中主页呈现一个博客文章列表。我的问题是如何将模型传递给每个子post视图 我有一个index.hbs在一个集合中迭代Javascript Rendr如何在RendrJS同构框架中将模型传递到子视图,javascript,rendr,Javascript,Rendr,假设我正在构建一个博客,其中主页呈现一个博客文章列表。我的问题是如何将模型传递给每个子post视图 我有一个index.hbs在一个集合中迭代 {{#forEach models}} {{view "post_view" model=value model_name="story"}} {{/forEach}} 我有一个post_view.js var BaseView = require('./base'); module.exports = BaseView.extend({
{{#forEach models}}
{{view "post_view" model=value model_name="story"}}
{{/forEach}}
我有一个post_view.js
var BaseView = require('./base');
module.exports = BaseView.extend({
className: 'post_view',
initialize: function() {
console.log(this.model); //undefined
console.log(this.options.model); //undefined on client, logs model attributes on server
}
});
module.exports.id = 'post_view';
但是模型似乎没有在post_view.js中设置。如果我在
{{forEach}}
循环中执行{{json value}}
,我可以看到打印的JSONified输出。我需要做什么来传递模型,我需要在视图中手动构造它吗?谢谢 这就是我们一直在做的事情,它很好地将它进一步抽象,以便我们可以重用“列表”组件
主页控制器
页面级模板(如主页)
Post项目模板(posts/Item.hbs)
{{title}}
{{description}}
我也有这个链接,我用它来尝试将那些对我们有用的惯例组合在一起:
我没有评论的名声,但这不是答案
初始化子视图时,通常
模型
还不存在。它肯定会在postRender()
中出现,并且应该在getTemplateData()中出现。我不记得是{{view}}
插件的确切问题导致了这种竞争状况,但我以前肯定见过这种情况。虫洞就在附近的某个地方:它在服务器上工作,但并不总是在客户机上。答案是parse()方法使用不当。我最初的故事集有这样一个属性
parse: function(rsp) {
return rsp.stories;
}
因为API响应包含一些元数据以及“stories”键下的故事数组。我删除了该解析方法,而是添加了
jsonKey: 'stories'
这解决了我的问题。我的问题是,在帖子/项目的视图中,我没有访问模型的权限。如果我注销发送到post/item
视图的参数,我会看到应用程序模型,但不会看到与该特定项目相关的模型。但是,使用相同的日志语句,模型按预期打印。再次打印console.log(this.options.model)代码>如何初始化视图和子视图?如果你按照我在上面发布的方式,你应该在初始化中使用它(这是您真正想要的,因为您希望执行此操作。在您的初始化方法中listenTo
s。请参见此处…我遵循您上面的操作…但不确定在何处显式初始化视图。我也查看了您的约定页面。为了清除模板本身,将按预期为集合中的每个模型呈现。click事件处理程序也可以工作(我将其设置为注销this.model,结果是“未定义”).Hi@jaredrada在我看来,你拥有的东西应该可以工作。如果你想更多地聊天,也许可以加入这个频道,我们可以尝试调试它。此外,如果你愿意共享整个项目,以便我可以在本地运行它,我可能会帮你很快。即使我在postRender方法中设置断点并检查con文本我只能看到模型Id(这个>选项>获取\ U摘要(这个以前没有,酷)>模型>,还有两个属性Id和模型类型(mongo Id和我的应用程序预期的“故事”)。我在哪里可以找到其余的模型信息?它不在这个>模型中。
<div class="media-list">
{{#each _collection.models}}
{{view "posts/item" model=this}}
{{/each}}
</div>
{{#forEach _collection.models}}
{{view "posts/item" model=value}}
{{/forEach}}
<div class="media">
<div class="media-body">
<h4 class="media-heading">{{title}}</h4>
{{description}}
</div>
</div>
parse: function(rsp) {
return rsp.stories;
}
jsonKey: 'stories'