gpt4 book ai didi

knockout.js - 使用 knockout 访问跨 View 模型的功能?

转载 作者:行者123 更新时间:2023-12-04 04:55:37 25 4
gpt4 key购买 nike

我正在关注 RN 关于发布/订阅同步的博客文章:

http://www.knockmeout.net/2012/05/using-ko-native-pubsub.html

我的应用程序有一个带有各种内部 View 模型的“ shell ” View 模型,其中之一是“文件夹”。在文件夹 viewmodel 中,我列出了文件夹。

从 shell 的菜单栏中,我需要能够添加另一个文件夹。这是我现在实现它的方式:

在 shell.js 中:

this.clickedAddFolder = ko.observable(false).publishOn("CLICKED_ADD_FOLDER");
this.addFolder = function () { clickedAddFolder(true); clickedAddFolder(false); };

然后在 folder.js 中:
var clickedAddFolder = ko.observable().subscribeTo("CLICKED_ADD_FOLDER");
innerModel.addFolder = ko.computed(function() {
if (clickedAddFolder()) {
var folder = new folderViewModel(addFolderDto);
innerModel.folders.push(folder);
refreshIsotope();
}
}).bind(this);

这个想法是 shell.js 将快速切换 clicked_add_folder 属性,folder.js 已订阅。一个计算的 observable 检测到这个变化并触发一些功能 - 添加一个文件夹。这是一个合理的解决方案吗?我想避免找到“有效”的解决方案;我想学习如何正确实现这个结果。

最佳答案

我假设您正在使用 ko.postbox ?如果是这种情况,我认为如果您只是删除 observables 并直接发布/订阅主题,会更清晰,如下所示:

// shell.js
this.addFolder = function addFolder(e) {
// 'Add Folder' clicked, publish on the topic
ko.postbox.publish('CLICKED_ADD_FOLDER', e);
};

//folder.js
ko.postbox.subscribe('CLICKED_ADD_FOLDER', function onClickedAddFolder(e) {
var folder = new folderViewModel(addFolderDto);
innerModel.folders.push(folder);
refreshIsotope();
});

这是一个没有实际加载邮箱的 JSFiddle,但我基本上只是从邮箱中删除了两个必要的功能: http://jsfiddle.net/QqBhk/

关于knockout.js - 使用 knockout 访问跨 View 模型的功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16782290/

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