Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/446.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Rendr如何在RendrJS同构框架中将模型传递到子视图_Javascript_Rendr - Fatal编程技术网

Javascript Rendr如何在RendrJS同构框架中将模型传递到子视图

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({

假设我正在构建一个博客,其中主页呈现一个博客文章列表。我的问题是如何将模型传递给每个子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({
     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'