我想知道是否有人可以帮助找出这种情况下的错误。我得到了#34; Uncaught ReferenceError:文本未定义"在第6行app.js:
((__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 %> — <%- item.assignee %>
我可以解释为什么没有定义文本吗?
答案 0 :(得分:1)
检查你的ToDoModel输入错误,Backbone Model字段应为&#34;默认&#34;不是&#34;默认&#34;,在解析模板时,Marionette视图会查找&#34;默认值&#34;字段:
https://marionettejs.com/docs/master/template.html#rendering-a-model
所以ToDoModel代码应该是这样的:
...
var ToDo = Backbone.Model.extend({
defaults: {
assignee: '',
text: ''
},
...
&#13;
答案 1 :(得分: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();
请注意,使用模板函数允许传递自定义参数 进入
.template
函数并允许更多地控制如何 调用.template
函数。
根据您目前提供的代码,我无法提供帮助。
答案 2 :(得分:0)
Marionette在将上下文传递给“模板”之前调用'serializeModel'。所以,如果你有像
那样的backbone.model{
.
.
.
attributes: {
text: 'someText',
asignee: 'someAsignee'
}
.
.
}
您的模板将会收到
{
text: 'someText',
assignee: 'someAsignee'
}
我使用过把手但没有完全用下划线。 {{this.text}}
和{{this.assignee}}
的工作方式类似于模板中的魅力。因此,请尝试this.text
或text
代替item.text
,看看是否有效