Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Backbone.js Collection.add方法被第三方脚本覆盖_Javascript_Backbone.js_Internet Explorer 8_Requirejs_Underscore.js - Fatal编程技术网

Javascript Backbone.js Collection.add方法被第三方脚本覆盖

Javascript Backbone.js Collection.add方法被第三方脚本覆盖,javascript,backbone.js,internet-explorer-8,requirejs,underscore.js,Javascript,Backbone.js,Internet Explorer 8,Requirejs,Underscore.js,我遇到了一个问题,即在注入Require的依赖项上覆盖了一个方法 目前,我有一个实用程序,可以在我们的网站上添加和控制一些通知,您可以在下面看到 define([ 'jQuery', 'Underscore', 'Backbone', 'Data', 'Window', 'text!utilities/notify/templates/utility.html' ], function($, _, Backbone, Data, Window, T

我遇到了一个问题,即在注入Require的依赖项上覆盖了一个方法

目前,我有一个实用程序,可以在我们的网站上添加和控制一些通知,您可以在下面看到

define([
    'jQuery',
    'Underscore',
    'Backbone',
    'Data',
    'Window',
    'text!utilities/notify/templates/utility.html'
], function($, _, Backbone, Data, Window, Template) {
    var Notify = Backbone.View.extend({

        events: {
            'click': 'close'
        },

        initialize: function() {
            var self = this;

            _.bindAll(this);

            // add notify if not in the dom
            var element = $('#notify')[0];
            if(_.isEmpty(element)) {
                var template = _.template(Template, {});
                $('body').prepend(template);
            }

            Data.add([
                // notify object
                {
                    id: 'notify',
                    addToUrl: false,
                    addToHistory: false
                }
            ]);
        }
    return new Notify;

});
这只是该文件中包含相关数据的一小部分

数据依赖项是一个包装器,用于添加一些帮助器方法来处理集合。但无论如何,我们都不会重载或修改集合上的add方法。我面临的问题是,在每一款现代evergreen浏览器chrome、firefox等中,数据都被正确注入,Data.add也能正常工作。但不幸的是,在IE8中,我不得不支持Data.add方法突然执行我们在页面上使用的Google Adsense async-ads.js文件中的一个函数。当这种情况发生时,它会导致疯狂的递归,IE8会给出堆栈溢出消息

我完全搞不懂Data.add方法是如何被第三方JS函数覆盖的!任何想法都将受到极大的赞赏

包括JS版本信息

Backbone 1.0.0
Require 2.1.2
Underscore 1.3.3
编辑:我已经按照要求包含了数据实用程序中的代码

/**
@appular {utility} data - designed to store variables for apps that multiple modules may need access too. works closely with the router to keep the url updated as well.
    @extends backbone.collection
    @define Data
*/
define([
    'jQuery',
    'Underscore',
    'Backbone',
    'utilities/data/models/data',
    'Cookies'
], function($, _, Backbone, DataModel, Cookies){
    var Collection = Backbone.Collection.extend({

        model: DataModel,

        lastChanged: '',

        initialize: function() {
            _.bindAll(this);


            this.on('add', function(model) {
                model.on('change', function() {
                    this.lastChanged = model.get('id');
                    this.trigger('dataChanged', model.get('id'));
                }, this);
            }, this);
        },

        // Sets data based on url data on initial load (ignores any parameters that are not defined in initialize above)
        load: function(data) {
            var dataInitialized = _.after(data.length, this.finalizeLoad);
            _.each(data, function(dataArray) {
                var model = this.get(dataArray[0]);

                if(!model) {
                    model = _.find(this.models, function(model) { return model.get('alias').toLowerCase() === dataArray[0].toLowerCase(); });
                }

                if(model) {
                    model.set({value: decodeURIComponent(dataArray[1])}, {silent: true});
                }

                dataInitialized();
            }, this);
        },

        finalizeLoad: function() {
            var triggerInitialized = _.after(this.length, this.triggerInitialized);

            _.each(this.models, function(model) {
                if(model.get('getFromCookie')) {
                    var cookieName = null;

                    if(model.get('alias') !== '') {
                        cookieName = model.get('alias');
                    } else {
                        cookieName = model.get('id');
                    }

                    model.set({value: Cookies.get(cookieName)});
                }

                if(model.get('isArray') && _.isString(model.get('value'))) {
                    var value = model.get('value');
                    model.set('value', value.split(','));
                }

                triggerInitialized();
            }, this);
        },

        /**
        @doc {event} initialized - fires when all data has been loaded
        */
        triggerInitialized: function() {
            this.trigger('initialized');
        },

        /**
        @doc {function} getValueOf - shortcut to get model's value
        */
        getValueOf: function(name) {
            return this.get(name).get('value');
        },

        /**
        @doc {function} setValueOf - shortcut to set model's value
        */
        setValueOf: function(name, value) {
            return this.get(name).set('value', value);
        }

    });

    return new Collection;
});

所显示的代码对于典型的主干视图来说有点超出范围,但是没有任何东西看起来会破坏对数据的调用。。。。你能为数据包装器提供代码吗?Peter Wagner我已经更新了原始问题