简体   繁体   English

主干视图无法使用requirejs进行扩展

[英]Backbone views unable to extend using requirejs

I am familiar with building backbone apps but am trying to convert it to use requirejs, the issue i am facing is when i am trying to extend the parent view, it is undefined 我熟悉构建主干应用程序,但我试图将其转换为使用requirejs,我面临的问题是当我尝试扩展父视图时,它是undefined

when trying to extend base-view.js to properties-view.js 尝试将base-view.js扩展到properties-view.js时

 define(['backbone','underscore','jquery','views/node/base-view'],                  
   function(Backbone, _, $, NodeBaseView){
     PropertiesView = NodeBaseView.extend({

        });
     }
});

Instantiating a child view inside the parent base view 在父基本视图中实例化子视图

    define(['backbone','underscore','jquery','views/node/properites-view'], function(Backbone, _, $, PropertiesView){
    NodeBaseView = Backbone.View.extend({
    ..
        new PropertiesView({});
    ..
    });

});

Here NodeBaseView is undefined when trying to extend it for PropertiesView. 尝试为PropertiesView扩展NodeBaseView时undefined NodeBaseView。 Any Help? 任何帮助?

Note: I am using AMD versions of backbone and underscore from here https://github.com/amdjs 注意:我在这里使用AMD版本的骨干和下划线https://github.com/amdjs

The problem here appears to be a circular dependency. 这里的问题似乎是循环依赖。 Base view requires properties view, and vice versa. 基本视图需要属性视图,反之亦然。 This results in one of them being undefined. 这导致其中一个未定义。

Let's pretend this definition sits in 'views/main' 让我们假装这个定义位于'views / main'

define(['backbone', 'views/node/base'],                          
    function(Backbone, BaseView){
        var MainView = BaseView.extend({

        });

        return MainView;
    }
);

Then as your child view: 然后作为您的孩子观点:

define(['backbone', 'views/node/base'],                          
    function(Backbone, BaseView) {
        var PropertiesView = BaseView.extend({

        });

        return PropertiesView;
    }
);

Then somewhere else in a universe far far away: 然后在遥远的宇宙中的其他地方:

myView = new MainView();

Using the example from the manual: 使用手册中的示例:

define(['backbone', 'views/node/base'],                          
    function(Backbone, BaseView){
        var MainView = BaseView.extend({

        });

        return MainView;
    }
);

Then 然后

define(['backbone'], function (Backbone) {                  
  var BaseView;

  require(['views/node/base'], function(b){
      BaseView = b;
  });

  var PropertiesView = BaseView.extend({

  });

  return PropertiesView;
});

You could require PropertiesView dynamically so BaseView does not have to depend on it. 您可以动态地要求PropertiesView,因此BaseView不必依赖它。

define(['backbone','underscore','jquery','views/node/base-view'],
   function(Backbone, _, $, NodeBaseView){
     PropertiesView = NodeBaseView.extend({

        });
     }
     return PropertiesView;
});

Here you require PropertiesView 这里需要PropertiesView

define(['backbone','underscore','jquery'],
    function(Backbone, _, $, PropertiesView){
        NodeBaseView = Backbone.View.extend({
        ..
            var PropertiesView = require('views/node/properites-view');
        ..
            new PropertiesView({});
        ..
        });

});

Example: 例:

define(['views/node/base-view', 'views/node/properites-view'],
    function(NodeBaseView, PropertiesView){
        return {
            base: new NodeBaseView()
        }
});

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM