2016-09-22 8 views
0

この場合、誰かが間違っているものを見つけるのを助けることができるのだろうかと思います。私は "キャッチされないのReferenceErrorを:テキストが定義されていません" を取得ラインで6 app.js:Marionette.js - Uncaught ReferenceError:テキストが定義されていません

((__t=(text))==null?'':_.escape(__t))+ 

driver.js:

var Marionette = require('backbone.marionette'); 
var TodoView = require('./views/layout'); 

var initialData = { 
    items: [ 
    {assignee: 'Scott', text: 'Write a book about Marionette'}, 
    {assignee: 'Andrew', text: 'Do some coding'} 
    ] 
}; 


var App = new Marionette.Application({ 
    onStart: function(options) { 
    var todo = new TodoView({ 
     collection: new Backbone.Collection(options.initialData.items), 
     model: new ToDoModel() 
    }); 
    todo.render(); 
    todo.triggerMethod('show'); 
    } 
}); 

App.start({initialData: initialData}); 

ビュー/ layout.js

var Backbone = require('backbone'); 
var Marionette = require('backbone.marionette'); 
var ToDoModel = require('../models/todo'); 

var FormView = require('./form'); 
var ListView = require('./list'); 


var Layout = Marionette.View.extend({ 
    el: '#app-hook', 

    template: require('../templates/layout.html'), 

    regions: { 
    form: '.form', 
    list: '.list' 
    }, 

    collectionEvents: { 
    add: 'itemAdded' 
    }, 

    onShow: function() { 
    var formView = new FormView({model: this.model}); 
    var listView = new ListView({collection: this.collection}); 

    this.showChildView('form', formView); 
    this.showChildView('list', listView); 
    }, 

    onChildviewAddTodoItem: function(child) { 
    this.model.set({ 
     assignee: child.ui.assignee.val(), 
     text: child.ui.text.val() 
    }, {validate: true}); 

    var items = this.model.pick('assignee', 'text'); 
    this.collection.add(items); 
    }, 

    itemAdded: function() { 
    this.model.set({ 
     assignee: '', 
     text: '' 
    }); 
    } 
}); 

module.exports = Layout; 

todoitem.html

<%- item.text %> &mdash; <%- item.assignee %> 

テキストが定義されていない理由は何ですか?

+0

アンダースコアのテンプレートエラーのようです。おそらく、あなたは '<%= text %>'のようなものをHTMLテンプレートのどこかに使っており、正しいデータをコンパイルされたテンプレートに渡していないことを意味します。 –

+0

質問が更新されました。テンプレートitemlist.htmlに出力が追加されました。 – dev85

答えて

0

カスタムデータでテンプレートをレンダリングする方法について説明しているMarionnetteのItemView documentationを見てください。

var my_template_html = '<div><%= args.name %></div>' 
var MyView = Marionette.ItemView.extend({ 
    template : function(serialized_model) { 
    var name = serialized_model.name; 
    return _.template(my_template_html)({ 
     name : name, 
     some_custom_attribute : some_custom_key 
    }); 
    } 
}); 

new MyView().render(); 

Note that using a template function allows passing custom arguments into the .template function and allows for more control over how the .template function is called.

ご提供いただいたコードは、お手伝いできません。

+0

ItemViewのtemplateHelperを試すことができます。これは、すべてのレンダーを実行する関数で、モデルの一部になりたくはありません – azibi

0

Marionetteは 'template'にコンテキストを渡す前に 'serializeModel'を呼び出します。あなたは

{ 
    . 
    . 
    . 
    attributes: { 
     text: 'someText', 
     asignee: 'someAsignee' 
    } 
    . 
    . 
} 

のようなbackbone.modelを持っているのであれば、あなたのテンプレートが

{ 
    text: 'someText', 
    assignee: 'someAsignee' 
} 

私はハンドルバーで働いている受信しますが、正確にアンダースコアではありません。そこに{{this.text}}{{this.assignee}}はテンプレートの魅力のように働く。それはタイプミスのためにあなたのToDoModelをチェック

1

を働くのであれば、参照、item.textの代わりにthis.textまたはtextを試すマリオネットビューが "探しテンプレートの解析中に、バックボーンモデルフィールドは、「デフォルト」ではない「デフォルト」でなければなりませんデフォルトは」フィールド:

https://marionettejs.com/docs/master/template.html#rendering-a-model

のでToDoModelコードは次のように行く必要があります。

... 
 

 
var ToDo = Backbone.Model.extend({ 
 
    defaults: { 
 
     assignee: '', 
 
     text: '' 
 
    }, 
 
    
 
...

関連する問題