Knockout和bootstrap没有绑定

时间:2015-05-29 15:45:02

标签: javascript twitter-bootstrap knockout.js

我无法获取绑定数据绑定的值。当我尝试读取值时,它总是未定义的。

我在这里设置了一个小提琴:

http://jsfiddle.net/tonymaloney1971/2qjhb5pw/5/

我想可能问题可能在于我设置淘汰赛绑定的方式:

$(document).ready(function () {
    var data = [{ PostCodeStart: "", PostCodeEnd: "", Mileage: "", Notes: ""     }];


        add: function () {
//this part is not working this.PostCodeStart() === "" 
            alert("How do I get the value of PostCodeStart");
            if (this.PostCodeStart() === "" || this.PostCodeEnd() === "" || this.Mileage() === "") {
                alert("empty field");
            }
            else
                this.journeyList.push({ PostCodeStart: this.PostCodeStart(), PostCodeEnd: this.PostCodeEnd(), Mileage: this.Mileage(), Notes: this.Notes() });
        },

另外,在我的小提琴中你会注意到每次添加新行时都会添加

  • 点,我怎么能不显示
  • 由于

  • 1 个答案:

    答案 0 :(得分:1)

    我做了一个修改过的小提琴,它可以将数据输入你的添加和删除功能。作为一般规则,您不会使用this来进行淘汰赛。作为旁注,道格拉斯·克罗克福德(Douglas Crockford)在他关于class-free OOP的讨论中从不使用this作为公平的理由。

    以下是相关的HTML:

                        <button class="btn-success img-rounded" data-bind="click:$root.add">
                            <span class="glyphicon glyphicon-plus-sign" style="text-align:right"></span>
                        </button>
                        <button class="btn-danger img-rounded" data-bind="click:$root.remove">
                            <span class="glyphicon glyphicon-remove"></span>
                        </button>
    

    viewModel:

        var viewModel = {
            journeyList: ko.observableArray(data),
            add: function (data) {
                if (data.PostCodeStart === "" || data.PostCodeEnd === "" || data.Mileage === "") {
                    alert("empty field");
                }
                else {
                    viewModel.journeyList.push({ PostCodeStart: data.PostCodeStart, PostCodeEnd: data.PostCodeEnd, Mileage: data.Mileage, Notes: data.Notes });
                }
            },
    
            remove: function (data) {
                viewModel.journeyList.remove(data);
            }
        };
    

    更新:为列表添加样式以消除项目符号。

        <ul data-bind="foreach: journeyList" style="list-style-type:none">
    

    http://jsfiddle.net/q6cjygy1/1/