проблема с созданием jsfiddle с нокаутом

Я пытаюсь создать jsfiddle с помощью нокаута, но постоянно получаю сообщение об ошибке, говорящее, что ko не определено. Я включил ссылку на нокаут, но jsfiddle почему-то неправильно ее понимает. Что я делаю неправильно?

сломанная скрипка

var viewModel = {
self: this,
BudgetLine: ko.observableArray([
    {
    Id: 1,
    Title: "Budget #1",
    Account: ko.observableArray([
        {
        Id: 1,
        Value: ko.computed(function(item) {
            return self.Accounts[this.Id];

        })},
    {
        Id: 2,
        Value: ko.computed(function(item) {
            return self.Accounts[this.Id];

        })}

    ])},
{
    Id: 2,
    Title: "Budget #2",
    Account: ko.observableArray([
        {
        Id: 1},
    {
        Id: 2}


              ])}]),

Accounts: ko.observableArray([
    {
    Id: 1,
    Title: "Account #1"},
{
    Id: 2,
    Title: "Account #2"},
{
    Id: 3,
    Title: "Account #3"},
{
    Id: 2,
    Title: "Account #1"}

     ])

};

ko.applyBindings(viewModel);


person Russellg    schedule 01.12.2012    source источник
comment
Проблема в том, что в вашем коде много простых ошибок JavaScript.   -  person Michael Best    schedule 01.12.2012


Ответы (2)


Вы правильно вызываете библиотеку ko, но ваша модель просмотра неверна

Я разветвил ваш пример и обрезал его, чтобы показать вам упрощенный пример того, что библиотека KO вызывается правильно http://jsfiddle.net/rYJGB/

<table>
  <tbody data-bind="template: {name: 'budgets', foreach: BudgetLine}"></tbody>
</table>
<script id='budgets' type="text/html">
     <tr>
         <td><input type="text" data-bind="value:Title"></td>
     </tr>
</script>


var viewModel = {
    self: this,
    BudgetLine: ko.observableArray([
        { Id: 1,Title: "Budget #1"        },
         Id: 2,Title: "Budget #2"        }
        ])
};
ko.applyBindings(viewModel);
person mosesfetters    schedule 01.12.2012

В коде присутствует много ошибок javascript.

Я разветвил jsFiddle. Поскольку в представлении присутствуют другие элементы, которых нет в модели представления, появляются ошибки для одного и того же. Я намеренно оставил это так, чтобы вы могли продолжить с того места, на котором остановились. Основная идея о том, как этого добиться, присутствует.

jsFiddle присутствует http://jsfiddle.net/rupesh_kokal/k7LHu/3/

Ниже представлен вид (или html):

            <table>

                <tbody data-bind="template: {name: 'budgets', foreach: BudgetLine}">
                </tbody>
            </table>
            <script id='budgets' type="text/html">
                <tr>
                    <td>
                        <input type="text" data-bind="value:Title"></input>
                    </td>
                    <td>
                        <input type="text" data-bind="value:Amount"></input>
                    </td>

                    <td>
                        <span data-bind="text:Modified" />
                    </td>
                    <td>
                       <select data-bind="options:$root.Account,optionsCaption:'select Account', optionsText:'Title', OptionsValue:'Id', selectedOptions:Account().Id",size="5", multiple="true"></select>                        

                    </td>
                    <td>
                        <span data-bind="text:CostCenterId"></span>
                    </td>
                    <td>
                        <select data-bind="options:$root.Costcenter,optionsCaption:'cost center', optionsText:'Title', optionsValue:'Id', value:CostCenterId "></select>                         
                      </td>
                    <td>
                        <span data-bind="text:CostCenter().Company().Title"></span>
                    </td>

                    <td>
                        <input type="button" data-bind="click: $root.deleteItem" value="Delete" />
                        <input type="button" data-bind="click: $root.saveItem" value="save" />
                    </td>

                </tr>
            </script>

Ниже приведена модель представления:

function ModViewModel() {
    var self = this;
    self.Accounts = ko.observableArray([
        {
        Id: 1,
        Title: "Account #1"},
    {
        Id: 2,
        Title: "Account #2"},
    {
        Id: 3,
        Title: "Account #3"},
    {
        Id: 2,
        Title: "Account #1"}

         ]);
    self.BudgetLine = ko.observableArray([]);

    self.BudgetLine.push(new BudgetLineItem(1, "Budget #1", [1, 2], self));
    self.BudgetLine.push(new BudgetLineItem(2, "Budget #2", [1, 2], self));

}


function BudgetLineItem(id, title, accountIds, parentModel) {
    var self = this;
    self.Id = id;
    self.Title = title;
    self.Account = ko.observableArray([]);

    if (accountIds.length > 0) {
        for (var i = 0, len = accountIds.length; i < len; i++) {
            self.Account.push(new AccountLineItem(accountIds[i], parentModel));
        }
    }
    else {
        self.Account.push(new AccountLineItem(accountIds, parentModel));
    }
}


function AccountLineItem(id, rootModel) {
    var self = this;
    self.Id = id;
    self.Value = ko.computed(function() {
        return rootModel.Accounts()[self.Id];
    });

}



ko.applyBindings(new ModViewModel());​
person Rups    schedule 01.12.2012
comment
Спасибо, я почистил представление, чтобы исключить поля, которых нет в модели. Теперь я пытаюсь привязать учетные записи к раскрывающемуся списку. Список учетных записей правильно отображается в dropdaown, но я не могу понять синтаксис привязки, чтобы учетные записи, выбранные для бюджетной строки, отображались как выбранные. jsfiddle.net/russellgove/2sLpZ/5 - person Russellg; 02.12.2012
comment
Если Рупс помог, примите его ответ или, по крайней мере, поднимите его ответ. - person mosesfetters; 02.12.2012