0

MyView.js:Как ссылаться на Магистральную/Марионовую Внутри?

define(['app/models/MyModel'], 
    function (MyModel) { 
     return Mn.LayoutView.extend({ 
      template: '#my-template', 
      className: 'my-classname', 
      regions: { 
       content: '.content-region', 
       panel: '.panel-region' 
      } 
      initialize: function() { 
       _.bindAll(this, 'childButtonClicked'); 
      }, 
      onShow: function() { 
       this.getRegion('content').show(new AnotherView()); 
      }, 
      childEvents: { 
       'some-child-click': 'childButtonClicked' 
      }, 
      childButtonClicked: function (view) { 
       var newView = new MyView({ 
        model: new MyModel({ 
         title: view.model.get('title') 
        }) 
       }); 
       this.getRegion('panel').show(newView); 
      } 
     }); 
    }); 

Я пытаюсь гнездовых экземпляров MyView внутри себя. Это работало правильно, когда я строил прототип, сваливая все в одну функцию, например, так:

var MyView = Mn.LayoutView.extend({ 
    ... 
    childButtonClicked: function(view) { 
    var newView = new MyView({ 
    ... 

Теперь, когда я пытаюсь отделить просмотров в свои собственные файлы и использовать require.js, я не могу выяснить синтаксис для самореферентного представления.

Когда я запускаю этот код как есть, я получаю сообщение об ошибке «MyView is undefined».

Если добавить его в заголовок требуется примерно так:

define(['app/models/MyModel', 'app/views/MyView'], 
    function (MyModel, MyView) { 

Я получаю ошибку 'MyView не является функцией.

EDIT для решения:

Отмеченное решение работает отлично, я в конечном итоге, используя очевидное-в-hindslght:

define(['app/models/MyModel'], 
    function (MyModel) { 
     var MyView = Mn.LayoutView.extend({ 
      template: '#my-template', 
      className: 'my-classname', 
      regions: { 
       content: '.content-region', 
       panel: '.panel-region' 
      } 
      initialize: function() { 
       _.bindAll(this, 'childButtonClicked'); 
      }, 
      onShow: function() { 
       this.getRegion('content').show(new AnotherView()); 
      }, 
      childEvents: { 
       'some-child-click': 'childButtonClicked' 
      }, 
      childButtonClicked: function (view) { 
       var newView = new MyView({ 
        model: new MyModel({ 
         title: view.model.get('title') 
        }) 
       }); 
       this.getRegion('panel').show(newView); 
      } 
     }); 
     return MyView; 
    }); 

ответ

2

Вы можете require() в модуле: var MyView = require(app/views/MyView);.

Так за неимением лучшего места:

childButtonClicked: function (view) { 
    var MyView = require(app/views/MyView); 
    var newView = new MyView({ 
     model: new MyModel({ 
      title: view.model.get('title') 
     }) 
    }); 
    this.getRegion('panel').show(newView); 
} 
Смежные вопросы