0

我的点击绑定没有调用 fullName 函数什么是正确的调用方式?

<div>
    <div data-bind="with: test.name" >
        <div>
        <span data-bind="text:firstName"></span>
        <span data-bind="text:firstName"></span>
        <br />
        <div>
        <span data-bind="click: $parent.fullName">FullName</span>
    </div>
</div>

modal = function(){
    var firstName = ko.observable('jhon'),
        lastName = ko.observable('deo'),
        test = {
            name : {
              firstName: firstName,
              lastName: lastName
           },
            fullName : function(){
                alert(name.firstName() + name.lastName());
            }
        };

    return {
        test: test
    }
}();

ko.applyBindings(modal);
4

2 回答 2

1

$parent 元属性指的是绑定层次结构中紧接在上面的绑定,而不是视图模型中的父对象。由于您的 with 在主绑定上下文中,因此 $parent 指的是根视图模型。

如果您需要访问菜单,您可以将其嵌套在另一个绑定中:

<div data-bind="with: test">
  <div data-bind="with: name">
  [...]
    <button data-bind="click: $parent.fullName">Click</button>
  </div>
</div>

或从父绑定(在您的示例中为模式或根绑定)开始限定您的调用:

<button data-bind="click: $parent.test.fullName">Click</button>

关于绑定上下文与模型层次结构的一些说明:

当您应用with: test.name绑定时,使用您的原始绑定,绑定上下文将如下所示:

<body> <!-- binding context: [modal] -->
  <div data-bind="with: test.name"> <!-- binding context: [modal|test.name] -->

相反,当应用上面显示的嵌套绑定时,层次结构更改为:

<body> <!-- bc: [modal] -->
  <div data-bind="with: test"> <!-- bc: [modal|test] -->
    <div data-bind="with: name"> <!-- bc: [modal|test|name] -->
于 2013-02-15T13:13:31.607 回答
0

您的点击事件应如下所示:

<span data-bind="click: $parent.test.fullName">FullName</span>

我已经更新了你的小提琴

于 2013-02-15T13:23:32.427 回答