Backbone.js打印“;函数String(){〔本机代码〕}"而不是模型属性

Backbone.js prints "function String() { [native code] }" instead of model attribute

本文关键字:quot 属性 模型 本机代码 打印 js 函数 String Backbone      更新时间:2023-09-26

我是backbone.js的新手,这是我的问题。

第一个I设置路由:

var Router = Backbone.Router.extend({
    initialize: function(){
      var data = {
        member: new Member.Model({ _id: 'some id' })
      };
      _.extend(this, data);
      // Use main layout and set Views.
      app.useLayout("main-layout").setViews({
        ".member": new Member.Views.Start(data)
      }).render();
    },
    routes: {
      "": "index"
    },
    index: function() {
      this.member.fetch();
    }
});

在索引路由中,当元素与成员类匹配时,只需获取开始视图并将其添加到DOM中。这很好用。然而,在模板中我有:

<%= model.get('username') %>

这会打印

function String() { [native code] }

而不是模型属性这是模型和视图类:

var Member = app.module();
Member.Model = Backbone.Model.extend({
    urlRoot: '/Members',
    idAttribute: "_id",
    defaults: {
      _id: null,
      name: String,
      email: String,
      username: String,
      initials: String,
      provider: String,
      provider_id: String,
      confirmed: Boolean,
      provider_avatar: String
    },
    initialize: function(models, options){
    }
  });
Member.Views.Start = Backbone.View.extend({
    template: "member/start",
    serialize: function() {
      return { model: this.options.member };
    },        
    initialize: function() {
    }
  });

对于我的项目,我使用骨干样板https://github.com/backbone-boilerplate/backbone-boilerplate模板工程:https://github.com/backbone-boilerplate/backbone-boilerplate/wiki/Working-with-templates

为什么我得到这个文本而不是模型值,以及如何解决这个问题?

username属性的默认值为String:

Member.Model = Backbone.Model.extend({
    ...
    defaults: {
      ...
      username: String,
      ...

并且CCD_ 3是一个函数:

> String
function String() { [native code] }

这就是您所看到的(记住,在Javascript中,您可以将函数分配给变量)。

如果您希望默认值是字符串类型的,则需要更改代码,如下所示:

Member.Model = Backbone.Model.extend({
    ...
    defaults: {
      ...
      username: '',
      ...

在模型定义中,您将所有默认值定义为函数,修复它的一种方法是使用实际字符串作为默认值,

defaults: {
  _id: null,
  name: '',
  email: '',
  username: '',
  initials: '',
  provider: '',
  provider_id: '',
  confirmed: false,
  provider_avatar: ''
},

如果你在浏览器控制台中键入String,你会得到

 function String() { [native code] }

这就是为什么你的输出是这样的。