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 在父视图中触发子视图模型方法:MarionetteJs_Javascript_Backbone.js_Triggers_Marionette - Fatal编程技术网

Javascript 在父视图中触发子视图模型方法:MarionetteJs

Javascript 在父视图中触发子视图模型方法:MarionetteJs,javascript,backbone.js,triggers,marionette,Javascript,Backbone.js,Triggers,Marionette,我有一个木偶视图SingleCategoryView,它接受集合并呈现集合视图OptionView。 optionView是itemView optionView的列表。 在我的SingleCategory视图中,我必须对Render进行测试 "onRender": function() { if(optionsView.hasOnlyExtraOption(optionsView.collection.models)) { var noResultsAvailableMsg

我有一个木偶视图SingleCategoryView,它接受集合并呈现集合视图OptionView。 optionView是itemView optionView的列表。 在我的SingleCategory视图中,我必须对Render进行测试

 "onRender": function() 
 {
   if(optionsView.hasOnlyExtraOption(optionsView.collection.models)) {
   var noResultsAvailableMsg = 
   this.model.getLocalisationModel().getNoResultsAvailableMsg(); 

   var myModel = new noResultsAvailableModel({noResultsAvailableMsg: 
   "noResultsAvailableMsg"});
   this.conflictMessageRegion.show(new noResultsAvailableView({ 'model' : 
   myModel}))} 
 }
以下是位于Options View文件中的hasOnlyExtraOptions的代码

"hasOnlyExtraOption": function(data) {
    return data.every(function(currentValue) {
        return 
         currentValue.get(
         MODEL_VIEW_CONSTANTS.ctaDisplayConflicted.selectors.cfgExtraOptions
          ListItem) || 
           currentValue.get(
        MODEL_VIEW_CONSTANTS.ctaDisplayConflicted.properties.isExtraOption);
                });

            }    
我的问题是,当我进行测试时,即使singleCategory是render,css类isExtraOption cfgExtraOptionslistItem尚未设置,因此测试结果未定义。 实际上,这些css类是由optionViewModel在此处设置的:

"onConfigurationStepsComplete": function() {
 // some code 
  this.setIsExtraOption();
  //some code }
更明确地说:optionView具有作为父选项的optionView,witch具有作为父选项的singleCategoryView。我的目标是通过singleCategoryView中的optionViewModel触发属性isExtraoption的更改

先谢谢你

您可以用于集合视图和项目视图。i、 获取配置后,从子视图触发一个方法,然后依次在父视图中执行代码。例如,在子视图中:

// optionView
doSomething() {
   this.triggerMethod('did:something', this);
}
您可以在父视图中收听以下内容:

 // optionsView
 onChildviewDidSomething(childView) {
    console.log('Something was done to ' + childView);
 }
以上将传播事件,直到您的案例中的选项View。 然后可以使用法线和机制将其进一步向上传播

例如,从选项视图触发另一个事件,如:

您可以从父视图中收听此事件,在您的示例中是singleCategoryView,类似于:

// singleCategoryView
this.optionsView.on('collectionview:did:something', this.handler);
// singleCategoryView
this.optionsView.on('collectionview:did:something', this.handler);