【问题标题】:Backbone.js prints "function String() { [native code] }" instead of model attributeBackbone.js 打印“function String() { [native code] }”而不是模型属性
【发布时间】:2013-06-26 17:52:31
【问题描述】:

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

首先我设置路由:

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

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

【问题讨论】:

  • 没有看到模型定义或模板调用或您使用的模板引擎很难帮助,用户名是否定义为函数?
  • @Andrew 我已经更新了我的问题

标签: javascript backbone.js


【解决方案1】:

username属性的默认值为String

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

String 是一个函数:

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

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

如果您希望默认值是字符串类型的某个 ,则需要像这样更改代码:

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

【讨论】:

    【解决方案2】:

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

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

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

     function String() { [native code] }
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-17
      • 2022-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多