如何在Knockout中选择父视图模型

How to select parent view model in Knockout?

本文关键字:视图 模型 选择 Knockout      更新时间:2023-09-26

我在我的页面中使用两个视图模型,mainViewModelfilterViewModel,其中filterViewModelmainViewModel实例化

function mainViewModel() {
    this.data   = ko.observableArray();
    this.filter = new filterViewModel();
}
function filterViewModel() {
    this.filter = function() {
        // ajax blablabla
    }
}

我如何能访问我的mainViewModelfilterViewModel设置ajax结果,由filterViewModel执行,到data变量在你的父视图模型?

为了简单起见,只显式地将父类传递给子类。

function mainViewModel() {
    this.data   = ko.observableArray();
    this.filter = new filterViewModel(this);
}
function filterViewModel(parent) {
    // do whatever with the parent
    this.filter = function() {
        // ajax blablabla
    }
}

正如注释所指出的那样,这引入了一个不必要的依赖。所以最好是传递你想要使用的属性,而不是父模型。

function mainViewModel() {
    this.data   = ko.observableArray();
    this.filter = new filterViewModel(this.data);
}
function filterViewModel(data) {
    // do whatever with the data
    this.filter = function() {
        // ajax blablabla
    }
}

或者你可以使用一个很棒的knockout插件knockout-postbox

function mainViewModel() {
    this.data = ko.observableArray()
         .syncWith('parentData');
    this.filter = new filterViewModel();
}
function filterViewModel() {
    this.parentData = ko.observableArray()
        .syncWith('parentData');
    this.filter = function() {
        // ajax blablabla
        // do whatever with this.parentData
    }
}

注意"parentData"可以是任何唯一的字符串,用来标识您选择的模型的属性。