【问题标题】:Unable to set the Model Attributes after a Backbone model.fetch() call在 Backbone model.fetch() 调用后无法设置模型属性
【发布时间】:2017-03-03 16:25:36
【问题描述】:

我遇到过很多示例,其中骨干视图类似于var view1 = Backbone.View.extend( { } ),但无法获得直接返回骨干视图的示例。在下面的代码中,我能够呈现模型属性的默认值并在灰尘模板中显示相同的值,但是当我执行 model.fetch() 时,在成功函数中我能够在控制台中看到 json 响应但无法将获取的值设置为模型属性并呈现新值。做,让我知道我在这里缺少什么。任何帮助表示赞赏。

 define(function (require) {
    'use strict';

    var $ = require('jquery');
    var Backbone = require('backbone');

    var g = require('global/dust-globals');
    var template = require('text!/dust/table1.dust');

    var SampleModel = Backbone.Model.extend({
        initialize: function () {
        },

        defaults:{ 
            SampleUpdate:'Test date',
            SampleCount: 0
        },

        urlRoot: "/Sample"
    });

    var obj1 = new SampleModel();

    return Backbone.View.extend({

        events: {
           // 'click .search-btn': 'searchBtnClick',
       },

       initialize: function(){
        this.testfunc();
        this.render();
        this.model.on("change", this.render, this);
    },

    render: function () {
        this.$el.html(g.renderTemplate('TabView', template, {}));
              //template is compiled and rendered successfully
              console.log('CHECK:'+obj1.get("lastUpdate"));
              return this;
          },

          testfunc : function () {
            obj1.fetch({
                success: function (response) {
                    console.log(JSON.stringify(response));
                    obj1.set("SampleUpdate", response.get("sampleUpdate"));
                    obj1.set("SampleCount", response.get("sampleCount"));
                    console.log('CHECK1:'+obj1.get("SampleUpdate"));
                }
            });
        }
    });
});

我调用上面代码的JS代码如下。

    var TabView = require('/SampleTab');

    return Backbone.View.extend({

        initialize: function () {
            this.tabView = new TabView({el: '#sample-div', model:this.model, appView: this});
            this.render();
        },

        render: function() {
            this.tabView.$el.show();
            this.tabView.render();
        }
    });

【问题讨论】:

  • 考虑改写你的问题,不清楚
  • @mikeapr4 我已经改写了这个问题.. 希望这有助于理解

标签: javascript backbone.js


【解决方案1】:

我无法理解您究竟想对代码执行什么操作,但您似乎没有正确使用 Backbone.View.extend({ ... })。来自the documentation for Backbone.View.extend

通过创建自定义视图类开始使用视图。你会想要覆盖渲染函数,指定你的声明性事件,也许还有视图根元素的 tagName、className 或 id。

[强调我的。]

Backbone.View.extend 用于创建您自己的 Backbone View 类,而不是实例化对象。

如果您正在寻找更多信息,我强烈建议您通读Addy Osmani's free e-book, Developing Backbone.js Applications。你可能已经知道它教的一些内容,但它有一些很好的扩展 Backbone 视图的示例,并且在解释使用 Backbone.js 的其他基础方面做得比我在这里做得更好。

【讨论】:

    猜你喜欢
    • 2012-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多