敲除没有创建属性

时间:2015-07-22 12:55:34

标签: javascript knockout.js knockout-3.0

我有点问题。 我的小提琴是

http://jsfiddle.net/LkqTU/25524/

JS

var helloVm = function()
{
    var vm=this;
    vm.obj1=ko.observable({});
    vm.obj2=ko.observable({});
    vm.test = function()
    {
        alert("fffff");
        alert("Obj 1 name is "+vm.obj1().name); 
        alert("Obj 2 name is "+vm.obj2().name); 
    };

};
ko.applyBindings(new helloVm(), document.getElementById('foo'));

HTML

<div id="foo">
    <div>
        <input type="text" data-bind="value:obj1().name" />
    </div>
    <div data-bind="with:obj2()" style="margin-top:2px">
        <input type="text" data-bind="value:name" />
    </div>
    <button data-bind="click:test">Test</button>
</div>

第一种情况是直接绑定到对象的未存在属性 第二种情况是通过&#34;与#34;绑定到对象的未存在属性。结合

在第二种情况下(使用&#34;使用&#34;),淘汰不会在对象中创建属性。 但它将在第一种情况下创建。

我有什么问题?

1 个答案:

答案 0 :(得分:0)

这是JSFiddle

我希望这就是你所追求的目标。

<强> HTML

<div id="foo">
    <div>
        <input type="text" data-bind="value: obj1().name" />
    </div>
    <div data-bind="with:obj2()" style="margin-top:2px">
        <input type="text" data-bind="value:name" />
    </div>
    <button data-bind="click:test">Test</button>
</div>

<强> JS

  

属性name不存在,因此您无法分配   它的价值。下面我已经设置了observables有一个对象   name属性。

var helloVm = function () {
    var vm = this;
    // Added an object property of name
    vm.obj1 = ko.observable({
        name: ''
    });
    // Added an object property of name = Result
    vm.obj2 = ko.observable({
        name: 'Result'
    });
    vm.test = function () {
        alert("fffff");
        alert("Obj 1 name is " + vm.obj1().name);
        alert("Obj 2 name is " + vm.obj2().name);
    };

};
ko.applyBindings(new helloVm(), document.getElementById('foo'));