2013-11-13 4 views
0

Я работаю с привязкой данных json в теге ul. Это показывает, что произошла ошибка .Здесь есть код:Uncaught TypeError: Object function() не имеет элементов метода

<div id="newdiv" data-bind="visible: selectedSection() === 'ulClass', stopBinding: true "> 
    <ul id="ulClass" data-bind="template: { name: 'templatesSample', foreach: items}"> 
     <script id="templatesSample" type="text/html"> 
      <li><span data - bind = "text:name" > </span> 
      </li> 
     </script> 
    </ul> 
</div> 

Вид модели

function names(firstnames) { 
    this.name = ko.observable(firstnames); 
} 

var mappedData; 
var viewmodel; 

$(document).ready(function() { 
    ko.bindingHandlers.stopBinding = { 
     init: function() { 
      return { 
       controlsDescendantBindings: true 
      }; 
     } 
    }; 
    ko.virtualElements.allowedBindings.stopBinding = true; 

    viewmodel = function() { 
     items: ko.observableArray([]); 
    }; 


    var namesOfPeople = '[{"Firstnames":"john"},{"Firstnames":"peter"},{"Firstnames":"mary"}]'; 
    var dataFromServer = ko.utils.parseJson(namesOfPeople); 
    mappedData = ko.utils.arrayMap(dataFromServer, function (item) { 
     return new names(item.Firstnames); 
    }); 

    viewmodel.items(mappedData); 

    ko.applyBindings(viewmodel, document.getElementById("ulClass")); 
}); 

Он показывает следующее сообщение об ошибке в консоли:

Uncaught TypeError: Object function() 
    { 
     items:ko.observableArray([]); 

    } has no method 'items' 

Как я могу исправить проблема? Пожалуйста, предложите решение.

Благодаря

ответ

2

Вы должны решить между инициализации виртуальной машины в качестве объекта, или с помощью функции конструктора.

Это комбинация обоих, в основном sintactically недействителен я думаю :):

viewmodel = function() 
{ 
    items:ko.observableArray([]); 
}; 

Так как это сделать:

viewmodel = { 
       items:ko.observableArray([]); 
      }; 

Или это:

var VM=function() { 
        this.items = ko.observableArray([]); 
       }; 

var viewModel = new VM();