订阅来自淘汰赛js中另一个viewmodel的值

时间:2013-02-11 17:24:05

标签: knockout.js knockout-mapping-plugin

我正在尝试将我的视图模型拆分为多个可重用的视图模型。 我有一个视图模型,其中包含几个下拉菜单和一个按钮。

    var TopView = function () {
       self.DropDownA = ko.observableArray();
       self.selectedDDA = ko.observable();
       self.DropDownB = ko.observableArray();
       self.selectedDDB = ko.observable();

       $.getJSON("someAPIurl", function (result) {
            ko.mapping.fromJS(result, {}, self);
        });  //this builds dropdownA

        $self.selectedDDA.subscribe(function(newValue) {
            $.getJSON("anotherAPI"+newValue, function (result) {
                ko.mapping.fromJS(result, {}, self);

            });
        };  // this builds dropdownB
        $self.buttonClicked = function() {
            alert("I clicked!");
        }
}

我的主视图模型如下所示:

var MainView = function () {
   var self = this;
   var topView = ko.observable({ TopView: new TopView() });

   // How do i get the selected values from topView once the user clicks the button???
}

如何从主视图中订阅DropDownA和DropDownB选择的值??? 请帮忙!谢谢!

1 个答案:

答案 0 :(得分:1)

只要您不想完全交换它,就不需要使TopView本身可观察。您可以将其创建为MainView的属性,并像绑定中的那样访问它:

<button data-bind="click:topView.buttonClicked">click me, I&#39;m a button!</button>

TopView 保持原样(修复后使用self$self而不定义它们)

MainView 看起来像这样:

var MainView = function () {
   var self = this;
   self.topView = new TopView();
}

<强> JSFiddle example