【问题标题】:backbone-extend.js doesn't seem to load my method骨干扩展.js 似乎没有加载我的方法
【发布时间】:2013-07-31 14:31:45
【问题描述】:

我将此添加到我的主干扩展.js 文件中,该文件与主干-min.js 位于同一文件夹中...

_.extend(Backbone.View.prototype, {
    getFormData: function(form) { 
        var unindexed_array = form.serializeArray();
        var indexed_array = {};

        $.map(unindexed_array, function(n, i){
            indexed_array[n['name']] = n['value'];
        });

        return indexed_array;
    }
});

但是,当我在视图代码中调用 this.getFormData 时,我得到一个方法未定义的错误。我错过了什么?感谢您的帮助!

编辑:这是我的观点。我必须取消注释 getFormData 方法才能使其工作。否则它看不到 getFormData...

define([
        'jquery',
        'underscore',
        'backbone',
        'models/Member',
        'text!templates/memberEditTemplate.html'
    ], function($, _, Backbone, Member, memberEditTemplate) {

    var MemberEditView = Backbone.View.extend({

        el: $("#page"),

        model: 'member',

        initialize: function(args) {
            this.member = new Member({ id: args.id });
            this.member.on('error', this.eventSyncError, this);
            this.member.on('sync', this.eventSyncModelLoaded, this);
            this.member.fetch();
        },

        events: {
          "click #bttnMemberSave": "bttnClickMemberSave"
        },

        eventSyncError: function(model,response,options) {
            console.log('Sync error='+response.statusText);
            $('#server-message').css({'color':'red', 'font-weight':'bold'}).text(response.statusText);
            //$('#server-message').text(response.statusText);
        },

        eventSyncModelLoaded: function(model,response,options) {
            this.render();
        },

        eventSyncModelSaved: function(model,response,options) {
            console.log("Member saved!");
            $('#server-message').css({'color':'green', 'font-weight':'bold'}).text("Member saved!");
            //$('#server-message').text('Member saved!');
            var to = setTimeout(function() { Backbone.history.navigate('members', true); }, 2000);
        },

        bttnClickMemberSave: function() {
            var data = this.getFormData($('#member-form').find('form'));
            this.member.save(data, { success: this.eventSyncModelSaved });
        },

        // getFormData: function(form) { 
        //     var unindexed_array = form.serializeArray();
        //     var indexed_array = {};

        //     $.map(unindexed_array, function(n, i){
        //         indexed_array[n['name']] = n['value'];
        //     });

        //     return indexed_array;
        // },

        render: function() {
            this.member.toJSON();
            var compiledTemplate = _.template( memberEditTemplate, { member: this.member } );
            this.$el.html( compiledTemplate ); 
            return this;
        }

    });

    return MemberEditView;

});

【问题讨论】:

  • 能否提供实例化视图和调用方法的代码?这对我们有帮助。
  • @Lukas:刚刚发布了视图。该视图功能齐全。该代码没有问题。我只是无法看到 getFormData 扩展方法。仅适用于本地方法。
  • 您是否曾经通过调用new MemberEditView()new Backbone.View() 来实例化视图?
  • @Lukas:在 router.js 中是的。这是另一个问题:如果我要将上面的 _.extend 代码移出主干扩展.js 文件(由于某种原因没有加载),我将把代码放在哪里?在 main.js 中?还是在 app.js 中?我想我在 app.js 的初始化方法中尝试过,它也没有工作。
  • @Lukas:是的,我不知道我为什么这么认为。我想在我的脑海中我想/猜到这就是它应该这个词的方式。但现在看来这是一个错误的猜测:-/

标签: backbone.js backbone-views extending


【解决方案1】:

好的,我在 app.js 中的 RequireJS 所需文件数组中添加了主干扩展.js,现在它可以工作了。

【讨论】:

    猜你喜欢
    • 2014-11-04
    • 1970-01-01
    • 1970-01-01
    • 2020-12-30
    • 2014-06-15
    • 1970-01-01
    • 2012-11-18
    • 2023-03-05
    • 2012-11-23
    相关资源
    最近更新 更多