2012-06-06 15 views
16

में मैं Knockout.js का उपयोग कर अपने REST-Service के लिए क्लाइंट बनाना चाहता हूं। मेरे पास बहुत सारे रिपोजिटरी हैं जिन्हें मैं विभिन्न यूआरएल के माध्यम से एक्सेस करना चाहता हूं - इसलिए मैं प्रकटन-प्रोटोटाइप-पैटर्न का उपयोग करके इस समाधान के साथ आया। मेरा समस्या: मुझे पता नहीं है कि मेरे सेवा से प्राप्त होने वाले "डेटा" के साथ आइटम्सप्रोपर्टी को कैसे मैप करना है।Knockout.js एक JSON मैपिंग को एक अवलोकन-सरणी

var Repository = function (url) { 
    this.Url = url; 
    this.Items = ko.observableArray([]); 
    this.PendingItems = ko.observableArray([]); 
}; 

Repository.prototype = function() { 
    var 
     getAllItems = function() { 
      var self = this; 
      $.getJSON(self.Url, function (data) { 
      // data=[{"Id":1,"Name":"Thomas","LastName":"Deutsch"},{"Id":2,"Name":"Julia","LastName":"Baumeistör"}] 
       ko.mapping.fromJS(data, self.Items); 
      }); 
     }, 
    ... 


// i call it like this: 
customerRepository = new Repository('http://localhost:9200/Customer'); 
customerRepository.getAllItems(); 

मुझे लगता है कि समस्या यह है: ko.mapping.fromJS (डेटा, self.Items); लेकिन मुझे ऐसा करने का सही तरीका नहीं मिल रहा है।
प्रश्न: मैं क्या गलत कर रहा हूं? मुझे एक उदाहरण मिला है - और वे वही कर रहे हैं जो मुझे लगता है: http://jsfiddle.net/jearles/CGh9b/

उत्तर

28

मेरा मानना ​​है कि जेएस से दो तर्क संस्करण का उपयोग केवल उन वस्तुओं के लिए किया जाता है जिन्हें पहले मैप किया गया था, यानी उनके पास एक खाली खाली मानचित्रण विकल्प वस्तु थी। चूंकि आपका मैपिंग पहली बार चलाया गया है, इसलिए इसे प्रदाता की आवश्यकता है कि खाली विकल्प ऑब्जेक्ट ऐसा ही है।

ko.mapping.fromJS(data, {}, self.Items); 

http://jsfiddle.net/madcapnmckay/j7Qxh/1/

आशा इस मदद करता है।

+1

हर किसी के संदर्भ के लिए, इस उदाहरण में मध्य खाली खाली शब्द मैपिंग विकल्प ऑब्जेक्ट के लिए खाली प्लेसहोल्डर है। – pimbrouwers