Javascript 为什么我的木偶项目视图不渲染?

Javascript 为什么我的木偶项目视图不渲染?,javascript,backbone.js,marionette,backbone.js-collections,Javascript,Backbone.js,Marionette,Backbone.js Collections,我正在使用带把手模板的木偶,无法在CollectionView中渲染我的itemView 以下是CollectionView代码: define( [ 'App', 'marionette', 'handlebars', 'models/Model', 'collections/Collection', 'text!templates/welcome.html'], function(App, Marionette, Handlebars, Model, Collection, template

我正在使用带把手模板的木偶,无法在CollectionView中渲染我的itemView

以下是CollectionView代码:

define( [ 'App', 'marionette', 'handlebars', 'models/Model', 'collections/Collection', 'text!templates/welcome.html'],
function(App, Marionette, Handlebars, Model, Collection, template) {
    //ItemView provides some default rendering logic
    var ItemView = Marionette.ItemView.extend( {
        //Template HTML string
        template: Handlebars.compile(template),
        //model: new Model(),

        // View Event Handlers
        events: {

        },
        initialize: function(o) {
            console.log('init itemView');
        }
    });
    return Marionette.CollectionView.extend( {
        issues: new Collection(),
        itemView: ItemView,
        onRender: function() {this.issues.fetch()},
        initialize: function(o) { console.log('init collectionView')}
    });
});
这是模板

<div class="hero-unit">
<h1>Marionette-Require-Boilerplate Lite</h1>
<p>Lightweight Marionette Boilerplate application to get you off the ground fast.</p>
<p class="muted">
    You are viewing this application on
   </p>
<br/>
<table>
    {{#each items}}
    <tr><td>{{title}} - {{number}}</td></tr>
    {{/each}}
</table>
<a class="btn btn-primary btn-large" href="https:github.com/BoilerplateMVC/">See more Boilerplates</a>

木偶需要样板
轻量级木偶样板应用程序,让您快速离开地面

您正在上查看此应用程序


{{{#每项} {{title}}-{{number} {{/每个}}


我从这段代码中得到的唯一一点是CollectionView确实触发了它的initialize方法,并且集合是从GitHub获取的。

这无法工作的原因有多种,具体取决于您使用的木偶版本:

  • 对于最新的木偶版本,您必须使用“childView”而不是“itemView”
  • 要显示的项目应在属性“集合”中,而不是“问题”中

    例如:

      var IssuesView = Marionette.CollectionView.extend({
        childView: IssueView,
        onRender: function () {
          this.collection.fetch();
        },
        initialize: function (o) {
          console.log('init collectionView');
        }
      });
      new IssuesView({'collection': new Backbone.Collection()});
    
  • 现在,根据您提供的代码,我假设您的目标是在“项目”中显示问题,如果这是正确的,我建议使用“CompositeView”,然后您可以提供“容器”并在项目中呈现“问题”。例如:

            var IssueView = Marionette.ItemView.extend({
                itemTag: 'tr',
                //Template HTML string
                template: Handlebars.compile($("#item-template").html()),
                //model: new Model(),
    
                // View Event Handlers
                events: {
    
                },
                initialize: function (o) {
                    console.log('init itemView');
                }
            });
            var IssuesView = Marionette.CompositeView.extend({
                childView: IssueView,
                childViewContainer: "#issues",
                template: Handlebars.compile($("#some-template").html()),
                onRender: function () {
                    //this.issues.fetch();
                },
                initialize: function (o) {
                    console.log('init collectionView');
                }
            });
    
    模板的位置:

    <script id="item-template" type="text/x-handlebars-template">
       <td> 
        {{title}} - {{number}}
       </td>
    </script>
    <script id="some-template" type="text/x-handlebars-template">
      <div class = "hero-unit" >
        <h1>Marionette - Require - Boilerplate Lite </h1>
        <p>Lightweight Marionette Boilerplate ...</p>
        <p class = "muted"> You are viewing this application on </p>
        <br/>
        <table id="issues">
    
        </table>
     </script>
    
    
    {{title}}-{{number}
    木偶-要求-样板Lite
    轻巧的木偶样板

    您正在上查看此应用程序


    下面是JSFIDLE,它的工作版本如下:

    根据您使用的木偶版本,有多种原因导致此功能无法工作:

  • 对于最新的木偶版本,您必须使用“childView”而不是“itemView”
  • 要显示的项目应在属性“集合”中,而不是“问题”中

    例如:

      var IssuesView = Marionette.CollectionView.extend({
        childView: IssueView,
        onRender: function () {
          this.collection.fetch();
        },
        initialize: function (o) {
          console.log('init collectionView');
        }
      });
      new IssuesView({'collection': new Backbone.Collection()});
    
  • 现在,根据您提供的代码,我假设您的目标是在“项目”中显示问题,如果这是正确的,我建议使用“CompositeView”,然后您可以提供“容器”并在项目中呈现“问题”。例如:

            var IssueView = Marionette.ItemView.extend({
                itemTag: 'tr',
                //Template HTML string
                template: Handlebars.compile($("#item-template").html()),
                //model: new Model(),
    
                // View Event Handlers
                events: {
    
                },
                initialize: function (o) {
                    console.log('init itemView');
                }
            });
            var IssuesView = Marionette.CompositeView.extend({
                childView: IssueView,
                childViewContainer: "#issues",
                template: Handlebars.compile($("#some-template").html()),
                onRender: function () {
                    //this.issues.fetch();
                },
                initialize: function (o) {
                    console.log('init collectionView');
                }
            });
    
    模板的位置:

    <script id="item-template" type="text/x-handlebars-template">
       <td> 
        {{title}} - {{number}}
       </td>
    </script>
    <script id="some-template" type="text/x-handlebars-template">
      <div class = "hero-unit" >
        <h1>Marionette - Require - Boilerplate Lite </h1>
        <p>Lightweight Marionette Boilerplate ...</p>
        <p class = "muted"> You are viewing this application on </p>
        <br/>
        <table id="issues">
    
        </table>
     </script>
    
    
    {{title}}-{{number}
    木偶-要求-样板Lite
    轻巧的木偶样板

    您正在上查看此应用程序


    下面是JSFIDLE,它的工作版本如下:

    根据您使用的木偶版本,有多种原因导致此功能无法工作:

  • 对于最新的木偶版本,您必须使用“childView”而不是“itemView”
  • 要显示的项目应在属性“集合”中,而不是“问题”中

    例如:

      var IssuesView = Marionette.CollectionView.extend({
        childView: IssueView,
        onRender: function () {
          this.collection.fetch();
        },
        initialize: function (o) {
          console.log('init collectionView');
        }
      });
      new IssuesView({'collection': new Backbone.Collection()});
    
  • 现在,根据您提供的代码,我假设您的目标是在“项目”中显示问题,如果这是正确的,我建议使用“CompositeView”,然后您可以提供“容器”并在项目中呈现“问题”。例如:

            var IssueView = Marionette.ItemView.extend({
                itemTag: 'tr',
                //Template HTML string
                template: Handlebars.compile($("#item-template").html()),
                //model: new Model(),
    
                // View Event Handlers
                events: {
    
                },
                initialize: function (o) {
                    console.log('init itemView');
                }
            });
            var IssuesView = Marionette.CompositeView.extend({
                childView: IssueView,
                childViewContainer: "#issues",
                template: Handlebars.compile($("#some-template").html()),
                onRender: function () {
                    //this.issues.fetch();
                },
                initialize: function (o) {
                    console.log('init collectionView');
                }
            });
    
    模板的位置:

    <script id="item-template" type="text/x-handlebars-template">
       <td> 
        {{title}} - {{number}}
       </td>
    </script>
    <script id="some-template" type="text/x-handlebars-template">
      <div class = "hero-unit" >
        <h1>Marionette - Require - Boilerplate Lite </h1>
        <p>Lightweight Marionette Boilerplate ...</p>
        <p class = "muted"> You are viewing this application on </p>
        <br/>
        <table id="issues">
    
        </table>
     </script>
    
    
    {{title}}-{{number}
    木偶-要求-样板Lite
    轻巧的木偶样板

    您正在上查看此应用程序


    下面是JSFIDLE,它的工作版本如下:

    根据您使用的木偶版本,有多种原因导致此功能无法工作:

  • 对于最新的木偶版本,您必须使用“childView”而不是“itemView”
  • 要显示的项目应在属性“集合”中,而不是“问题”中

    例如:

      var IssuesView = Marionette.CollectionView.extend({
        childView: IssueView,
        onRender: function () {
          this.collection.fetch();
        },
        initialize: function (o) {
          console.log('init collectionView');
        }
      });
      new IssuesView({'collection': new Backbone.Collection()});
    
  • 现在,根据您提供的代码,我假设您的目标是在“项目”中显示问题,如果这是正确的,我建议使用“CompositeView”,然后您可以提供“容器”并在项目中呈现“问题”。例如:

            var IssueView = Marionette.ItemView.extend({
                itemTag: 'tr',
                //Template HTML string
                template: Handlebars.compile($("#item-template").html()),
                //model: new Model(),
    
                // View Event Handlers
                events: {
    
                },
                initialize: function (o) {
                    console.log('init itemView');
                }
            });
            var IssuesView = Marionette.CompositeView.extend({
                childView: IssueView,
                childViewContainer: "#issues",
                template: Handlebars.compile($("#some-template").html()),
                onRender: function () {
                    //this.issues.fetch();
                },
                initialize: function (o) {
                    console.log('init collectionView');
                }
            });
    
    模板的位置:

    <script id="item-template" type="text/x-handlebars-template">
       <td> 
        {{title}} - {{number}}
       </td>
    </script>
    <script id="some-template" type="text/x-handlebars-template">
      <div class = "hero-unit" >
        <h1>Marionette - Require - Boilerplate Lite </h1>
        <p>Lightweight Marionette Boilerplate ...</p>
        <p class = "muted"> You are viewing this application on </p>
        <br/>
        <table id="issues">
    
        </table>
     </script>
    
    
    {{title}}-{{number}
    木偶-要求-样板Lite
    轻巧的木偶样板

    您正在上查看此应用程序


    下面是JSFIDLE,它的工作版本如下:

    您的问题是没有在CollectionView中指定集合。你想做什么

    var collectionView = Marionette.CollectionView.extend({
        collection: new issues
       ...
    });
    

    您的问题是没有在CollectionView中指定集合。你想做什么

    var collectionView = Marionette.CollectionView.extend({
        collection: new issues
       ...
    });
    

    您的问题是没有在CollectionView中指定集合。你想做什么

    var collectionView = Marionette.CollectionView.extend({
        collection: new issues
       ...
    });
    

    您的问题是没有在CollectionView中指定集合。你想做什么

    var collectionView = Marionette.CollectionView.extend({
        collection: new issues
       ...
    });