3

ばかげたことをしていることはわかっていますが、バックボーンのマリオネット アプリで意味のないテンプレート エラーが表示されます。fetch イベントが発生する前に、単一のアイテムをレンダリングしているように見えます。

_.templateSettings = {
    interpolate: /\{\{(.+?)\}\}/g
};


MyApp = new Backbone.Marionette.Application();
MyApp.addRegions({
    TagsRegion: "#tagsHolder"
});



MyApp.NoItemsView = Backbone.Marionette.ItemView.extend({
    template: "#show-no-items-message-template"
});


MyApp.Tag = Backbone.Model.extend({

});
MyApp.TagCollection = Backbone.Collection.extend({
    model: MyApp.Tag,
    url: '/API/Tag'
});
MyApp.TagItemView = Backbone.Marionette.ItemView.extend({
    template: "#tag-template",
    tagName: 'li'
});


MyApp.TagCollectionView = Backbone.Marionette.CollectionView.extend({
    itemView: MyApp.TagItemView,
    emptyView: MyApp.NoItemsView,
    tagName: 'ul'
});


MyApp.addInitializer(function(options){
    var tagCollection = new MyApp.TagCollection({
    });
    var tagCollectionView = new MyApp.TagCollectionView({
        collection: tagCollection
    });

    tagCollection.fetch();
    MyApp.TagsRegion.show(tagCollectionView);
});

そして私のhtmlページは

<div id="TagsDiv">
    <h1>Tags</h1>
    <div id="tagsHolder"></div>
</div>    
<script type="text/template" id="show-no-items-message-template">
    No items found.
</script>

<script type="text/template" id="tag-template">
    {{ TagName }}
</script>


    <script type="text/javascript" src="/Scripts/Views/Home/Upload.js"></script>
    <script type="text/javascript">
        $(document).ready(function () {

            MyApp.start();
        });

タグテンプレートから口ひげを取り除くと、1: " TagName " と表示され、フェッチが完了すると正しい番号が表示されます。

口ひげを元に戻すと、「TagName is not defined」が表示されます

私は自分のパターンの 1 つが逆になっていると感じています。近すぎて見えない。

ありがとう -マーク

4

3 に答える 3

3

問題は、イニシャライザのこの行です

var tagCollection = new MyApp.TagCollection({
    });

空のオブジェクトリテラルをBackbone.Collectionコンストラクターに渡すと、Backboneはコレクションに空のモデルを作成します。これを修正するには、オブジェクトリテラルを削除するだけです。

var tagCollection = new MyApp.TagCollection()

空のアイテムはもう含まれていません。

于 2012-07-04T02:29:33.650 に答える
0

試す:

tagCollection.fetch({ wait: true });
于 2012-07-03T21:09:53.263 に答える
0

モデルを変更して、テンプレートにしたいすべてのデフォルト値を設定しました。クルージーに感じますが、機能するアプリを提供してくれます。

MyApp.Tag = Backbone.Model.extend({
    defaults :
        {
            TagName : 'None'
        }
});
于 2012-07-03T23:10:29.830 に答える