backbone.js Marionette.js -未捕获的引用错误:未定义文本

vlju58qv  于 2022-11-10  发布在  其他
关注(0)|答案(3)|浏览(186)

我想知道是否有人可以帮助找到这个案例中的错误。文本未被定义”在第6行app.js中:

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

驱动程序.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});

视图/布局.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;

待办事项.html

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

我能解释为什么文本没有定义吗?

piah890a

piah890a1#

检查你的ToDoModel是否有打字错误, Backbone.js 模型字段应该是“默认值”而不是“默认值,”而解析模板 puppet 视图时会查找“默认值”字段:
https://marionettejs.com/docs/master/template.html#rendering-a-model
因此ToDoModel代码应该如下所示:

...

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

...
hzbexzde

hzbexzde2#

您应该查看Marionnette的ItemView文档,该文档解释了如何使用自定义数据呈现模板。

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函数进行更多控制。
你现在提供的代码我帮不上忙。

w3nuxt5m

w3nuxt5m3#

在将上下文传递给“template”之前,Marionette调用“serializeModel”。因此,如果您有一个 Backbone.js .model,如

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

您的模板将收到

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

我曾经处理过车把,但没有下划线。在模板中,{{this.text}}{{this.assignee}}就像一个符咒。所以,尝试用this.texttext代替item.text,看看是否有效

相关问题