Javascript 我升级了Knockout.js,现在我的模板坏了

Javascript 我升级了Knockout.js,现在我的模板坏了,javascript,knockout.js,Javascript,Knockout.js,在我的项目中,我将knockout.js从1.2升级到了2.1。我正在使用一些基本的模板,它们似乎被破坏了。我包括jQuery.tmpl.js和knockout-2.1.0.js。希望得到一个快速的答案 <ul data-bind="template: {name:'addressesTemplate', foreach:addresses}"></ul> <button data-bind="click: addAddress">Add Address&l

在我的项目中,我将knockout.js从1.2升级到了2.1。我正在使用一些基本的模板,它们似乎被破坏了。我包括jQuery.tmpl.js和knockout-2.1.0.js。希望得到一个快速的答案

<ul data-bind="template: {name:'addressesTemplate', foreach:addresses}"></ul>

<button data-bind="click: addAddress">Add Address</button>

<button data-bind="click: save">Save Account</button>

<script id="addressesTemplate" type="text/html">
    <li>
    Address Type: <input data-bind="value: addressType"/><br/>
    Address Line 1: <input data-bind="value: addressLine1"/><br/>
    Address Line 2: <input data-bind="value: addressLine2"/><br/>
    City: <input data-bind="value: city"/><br/>
    State: <input data-bind="value: state"/><br/>
    Country: <input data-bind="value: country"/><br/>
    Zip Code: <input data-bind="value: zipCode"/><br/>
    <button data-bind="click: remove">Remove</button>
    </li>
</script>
<script type="text/javascript">



   function addressModel(id) {
        return {
            id: id,
            addressType: ko.observable(),
            addressLine1: ko.observable(),
            addressLine2: ko.observable(),
            city: ko.observableArray(),
            state: ko.observableArray(),
            country: ko.observableArray(),
            zipCode: ko.observableArray(),

            remove: function () {
                viewModel.addresses.remove(this);
            }

        };
    }

    var viewModel = {
        id : 0,
        username: ko.observable(""),
        addresses: ko.observableArray([]),
        addAddress: function () {
            this.addresses.push(new addressModel(""));
        },


        save: function () {
            alert(ko.toJSON(this));
            $.ajax({
                url: "/account/Save",
                type: "post",
                data: ko.toJSON(this),
                contentType: "application/json",
                success: function(result) {alert(result.message) },
                failure: function(result) { alert('fail') }
            });
        }

    };


    ko.applyBindings(viewModel);

</script>
    添加地址 储蓄账户
  • 地址类型:
    地址行1:
    地址行2:
    城市:
    状态:
    国家:
    邮政编码:
    去除
  • 函数地址模型(id){ 返回{ id:id, addressType:ko.observable(), addressLine1:ko.observable(), addressLine2:ko.observable(), 城市:ko.array(), 状态:ko.observearray(), 国家:韩国, zipCode:ko.observableArray(), 删除:函数(){ viewModel.addresses.remove(此); } }; } var viewModel={ id:0, 用户名:ko.observable(“”), 地址:ko.observableArray([]), addAddress:函数(){ this.addresses.push(新的addressModel(“”); }, 保存:函数(){ 警报(ko.toJSON(this)); $.ajax({ url:“/account/Save”, 类型:“post”, 数据:ko.toJSON(这个), contentType:“应用程序/json”, 成功:函数(result){alert(result.message)}, 失败:函数(结果){alert('fail')} }); } }; 应用绑定(视图模型);
    既然删除了jquery.tmpl,我就添加这个作为答案。但是为了增加附加值,这里是您的viewModel,它将删除功能向上移动到viewModel(和中)

    和新的
    按钮
    绑定:

    <button data-bind="click: $parent.removeAddress">Remove</button>
    
    删除
    
    既然删除了jquery.tmpl,我就添加这个作为答案。但是为了增加附加值,这里是您的viewModel,它将删除功能向上移动到viewModel(和中)

    和新的
    按钮
    绑定:

    <button data-bind="click: $parent.removeAddress">Remove</button>
    
    删除
    
    对我来说很好:。值得注意的是,您的addressModel具有指向其父级的remove函数(并且硬编码)是不好的。移除功能应位于viewmodel上。如果您需要更多关于原因或方式的解释,请告诉我。尝试去掉jQuery.tmpl.js,它不再使用。如果您没有使用jQuery模板的功能(您的示例没有),那么您可以删除它,如@Tyrsius所述。问题可能是您的jQuery模板版本太旧。您应该会在控制台中看到一条消息,指出这一点。以下是指向一个可用版本的链接:。删除依赖项是最好的选择。删除jQuery.tmpl.js做到了这一点。非常感谢!对我来说很好。值得注意的是,您的addressModel具有指向其父级的remove函数(并且硬编码)是不好的。移除功能应位于viewmodel上。如果您需要更多关于原因或方式的解释,请告诉我。尝试去掉jQuery.tmpl.js,它不再使用。如果您没有使用jQuery模板的功能(您的示例没有),那么您可以删除它,如@Tyrsius所述。问题可能是您的jQuery模板版本太旧。您应该会在控制台中看到一条消息,指出这一点。以下是指向一个可用版本的链接:。删除依赖项是最好的选择。删除jQuery.tmpl.js做到了这一点。非常感谢!