Javascript 在父视图中触发子视图模型方法:MarionetteJs
我有一个木偶视图SingleCategoryView,它接受集合并呈现集合视图OptionView。 optionView是itemView optionView的列表。 在我的SingleCategory视图中,我必须对Render进行测试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
"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);