knockoutjs:在viewmodel中添加函数

时间:2012-10-20 19:41:20

标签: knockout.js knockout-mapping-plugin knockout-2.0

以下是我在viewModel中添加函数ClickAction的方法

$.getJSON("api/BrowseCategory/Get", function (data) {
    categoryViewModel = ko.mapping.fromJS(data);
    categoryViewModel.clickAction = function () {
            alert('hi');
        }
    ko.applyBindings(categoryViewModel, $('.categories-gallery .frame').get(0));
});

但是当我尝试调用此函数时。我收到错误消息"错误:无法解析bindings.Message:ReferenceError:clickAction未定义;"

以下是我调用该函数的方法。

<section class="categories-gallery">
                        <div class="holder">
                            <div class="frame">
                                <article class="category-spacer"></article>
                                <!-- ko foreach: $data -->
                                <!-- ko foreach: ProductVariants -->
                                <article class="category" data-bind="click: clickAction,attr: { 'data-uuishlist-product-variant': JSON.stringify(ko.mapping.toJS($data)) }, css: { active: (($parentContext.$index() * $parent.ProductVariants().length) + $index()) == 1 }">
     </article>
                                <!-- /ko -->
                                <!-- /ko -->
                            </div>
                        </div>
</section>

我正在使用knoutoutjs映射插件从json对象生成viewmodel。那么如何在点击时调用一个函数?

1 个答案:

答案 0 :(得分:2)

foreach循环内部,您将绑定当前数组项的属性。但是,您可以使用特殊变量$parent$parents$root来绑定更高级别的对象。

在您的情况下,您应该能够绑定$root.clickAction以跳转到根视图模型。

关于特殊上下文变量的进一步参考:http://knockoutjs.com/documentation/binding-context.html

相关问题