gpt4 book ai didi

javascript - 在父 View 中触发 subview 模型方法: MarionetteJs

转载 作者:行者123 更新时间:2023-12-03 00:51:02 24 4
gpt4 key购买 nike

我有一个 Marionette View SingleCategoryView,它接受一个集合并呈现一个 Collection View optionsView。optionsView 是 itemView optionView 的列表。在我的 SingleCategory View 中,我必须对 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}))}
}

这是位于 optionsView 文件中的 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 已渲染,CSS 类( isExtraOption cfgExtraOptionslistItem )尚未设置,因此测试结果未定义。实际上这些 css 类是由 optionViewModel 设置的:

"onConfigurationStepsComplete": function() {
// some code
this.setIsExtraOption();
//some code }

更明确地说:optionView 以 optionsView 作为父级,witch 以 singleCategoryView 作为父级。我的目标是通过 singleCategoryView 中的 optionViewModel 触发属性 isExtraoption 的更改。

提前谢谢您。

最佳答案

您可以使用child event bubbling对于 Collection View 和项目 View 。即一旦获取配置就从 subview 触发一个方法,并依次在父 View 中执行代码。例如,在 subview 中:

// optionView
doSomething() {
this.triggerMethod('did:something', this);
}

您可以在父 View 中收听此内容,例如:

 // optionsView
onChildviewDidSomething(childView) {
console.log('Something was done to ' + childView);
}
<小时/>

上面将传播事件直到您的情况下的 optionsView 。然后您可以使用正常的 triggerlisten进一步向上传播的机制。

例如,从 optionsView 触发另一个事件,例如:

// optionsView
onChildviewDidSomething(childView) {
console.log('Something was done to ' + childView);
this.triggerMethod('collectionview:did:something', this);
}

您可以从父 View 监听此事件,在您的例子中是 singleCategoryView,类似于:

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

关于javascript - 在父 View 中触发 subview 模型方法: MarionetteJs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53042666/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com