2012-11-16 15 views
15

पर नॉकआउटज प्रोग्रामेटिक डाटाबेसिंग मैं एक तेज़ प्रोटोटाइप टूल पर काम कर रहा हूं जिसके लिए मैं गतिशील रूप से इंटरफ़ेस उत्पन्न करना चाहता हूं, और गतिशील रूप से बनाए गए तत्वों को डेटा डेटाबेस बनाना चाहता हूं। ViewModel कुछ ऐसा दिखाई देगा:उत्पन्न इंटरफ़ेस

var viewModel = { 
    vmSchema: { 
      "Id" : "int", 
      "Name" : "string", 
      "UpdatedOn" : "date" 
    }, 
    vmData: { 
      "Id": "123" 
      "Name" : "Bob", 
      "UpdatedOn" : "2012-11-16T00:00:00" 
    } 
} 

vmSchema इंटरफ़ेस उनके प्रकार के आधार पर तत्वों को बनाने के लिए इस्तेमाल किया जा होगा, और फिर vmData उन तत्वों को DataBind होगा।

इंटरफ़ेस बनाना कोई समस्या नहीं है। चुनौती कार्यक्रमशील रूप से जेनरेट इंटरफ़ेस में vmData mdoel को डाटाबेसिंग कर रही है।

क्या कोई उपकरण या तकनीक है जो इस प्रकार के प्रोग्रामेटिक डाटाबेसिंग की अनुमति देगी?

उत्तर

31

ऐसा लगता है कि आपके मॉडल के फ़ील्ड और प्रकार रनटाइम तक ज्ञात नहीं होंगे। इस प्रकार के गतिशील रूप से जेनरेट किए गए मॉडल के लिए, आपको कुछ कोड लिखना होगा जो इसकी गुणों को अवलोकन में बदल देता है, यह मानते हुए कि आपको दो-तरफा बाध्यकारी की आवश्यकता है। मूल बात है, तो आप vmData के माध्यम से पुनरावृति और एक ko.observable में उसमें जो कुछ बदल सकता है:

for (var member in viewModel.vmData) { 
    if (viewModel.vmData.hasOwnProperty(member)) { 
     viewModel.vmData[member] = ko.observable(viewModel.vmData[member]); 
    } 
} 

दृश्य बंधन के रूप में, यह क्या है "इंटरफ़ेस तत्वों बनाने" पर निर्भर करता है। यदि वे निर्माण समय पर HTML तत्वों के लिए data-bind विशेषताओं को जोड़ सकते हैं, तो सब कुछ सरल होना चाहिए: जैसे ही इंटरफ़ेस बनाया गया है और DOM से जुड़ा हुआ है, बस ko.applyBindings चलाएं। अगर किसी कारण से आप data-bind सजावट नहीं जोड़ सकते हैं, तो आप थोड़ा अनियंत्रित ko.applyBindingsToNode का उपयोग करके मैन्युअल रूप से बाइंडिंग निर्दिष्ट कर सकते हैं।

// manually specify a binding for an element 
var elm = document.getElementById('some_elm'); 
ko.applyBindingsToNode(elm, { value: viewModel.vmData.id}, viewModel.vmData); 

उपर्युक्त <span class="some_elm" data-bind="value: vmData.id"></span> के बराबर है।

+0

मैं यूआई उत्पन्न करने के लिए नॉकआउट का उपयोग करूंगा, vmSchema के माध्यम से पुनरावृत्ति करके और प्रकार के आधार पर सशर्त टेम्पलेट का उपयोग करके। चाल तब प्रोग्रामेटिक रूप से उन्हें vmData से कनेक्ट कर देगी। – dcpar

+1

इसके लिए धन्यवाद! कस्टम बाध्यकारी हैंडलर के भीतर से बाध्यकारी में स्थापित करने में सक्षम होने के लिए मुझे बस इतना ही चाहिए! – rossisdead

+1

+1 धन्यवाद! मैं हारने वाला था, लेकिन फिर मुझे यह पोस्ट मिला। – Laith

संबंधित मुद्दे