2013-07-23 7 views
6

का उपयोग कर "knockout.mapping" प्लगइन लोड हो रहा है मैं आवश्यक एमएस के साथ एक एमवीसी 3 एप्लीकेशन बना रहा हूं। मेरे विचारों में मुझे मॉडल ऑब्जेक्ट को नॉकआउट व्यूमोडेल ऑब्जेक्ट में कनवर्ट करने की आवश्यकता है। इसलिए मुझे नॉकआउट और नॉकआउट.मैपिंग पुस्तकालयों का उपयोग करने की आवश्यकता है।require.js

मेरा आवेदन निम्न तरीके से डिज़ाइन किया गया है,

1)। सभी स्क्रिप्ट फ़ाइलें फ़ोल्डरों में वर्गीकृत किया जाता है

  • स्क्रिप्ट/ऐप्स/घर/- होम नियंत्रक में विचारों के लिए स्क्रिप्ट में शामिल है।
  • स्क्रिप्ट/lib/- jQuery, नॉकआउट, knockout.mapping, requirejs आदि

2) की तरह स्क्रिप्ट में शामिल है। "_Layout.cshtml" में मैं इस तरह "require.js" का संदर्भ दे रहा हूं।

<script src="@Url.Content("~/Scripts/lib/require.js")" type="text/javascript"></script> 

3)। require.js सेटिंग्स मैं "common.js" (स्क्रिप्ट/lib/common.js)

require.config(
{ 
    baseUrl: "/Scripts/", 
    paths:{ 
      jquery: "lib/jquery-2.0.3", 
      ko: "lib/knockout-2.3.0", 
      komapping: "lib/knockout.mapping" 
     } 
}); 

4) नामक एक अलग स्क्रिप्ट फ़ाइल का उपयोग कर रहा कॉन्फ़िगर करने के लिए। यह जो 'स्क्रिप्ट/ऐप्स/घर/में है मेरी index.js फ़ाइल है, सूचकांक होम "नियंत्रक

" में कार्रवाई विधि ""

define(['ko', 'komapping'], function (ko, komapping) { 

var person = function() { 
    var self = this; 
    self.getPersonViewModel = function (data) { 
     return ko.mapping.fromJS(data); ; 
    }; 

}; 
return { Person: person }; 

})।

5) यह मेरा है "

public ActionResult Index() 
    { 
     var person = new Person 
     { 
      Id = 1, 
      Name = "John", 
      Addresses = new List<Address>(new[]{new Address{Country = "Country 1", City = "City 1"}}) 
     }; 

     return View(person); 
    } 

6)। अंत में यह मेरा "सूचकांक" दृश्य

@model MMS.Web.Models.Person 

<script type="text/javascript"> 

require(["/Scripts/common/common.js"], function() { 

      require(["app/home/index"], function (indexJS) { 
       var person = new indexJS.Person(); 
       var vm = person.getPersonViewModel(@Html.Raw(Json.Encode(Model))); 
      }); 
}); 
</script> 

है समस्या का सामना करना पड़ रहा है जो मैं कर रहा है जब index.js फ़ाइल लोड, मैं एक स्क्रिप्ट त्रुटि है कि knockout.js लोड नहीं किया जा सकता है।

संसाधन लोड करने में असफल: सर्वर 404 की स्थिति (नहीं मिला) के साथ जवाब दिया - http: ///Scripts/knockout.js

लेकिन अगर मैं "komapping" की निर्भरता को निकालना "index.js" फ़ाइल के अंदर यह सही ढंग से लोड हो जाता है, लेकिन फिर मैपिंग कार्यक्षमता का उपयोग नहीं कर सकता।

मैं इन कड़ियों के अंदर एक नज़र था, लेकिन एक समाधान, नहीं पा सके Knockout.js mapping plugin with require.js और https://github.com/SteveSanderson/knockout.mapping/issues/57

आपका मदद, सुझाव बहुत सराहना कर रहे हैं। धन्यवाद!

उत्तर

19

मुझे एक ही समस्या थी। समस्या यह है कि knockout.mapping एक नॉकआउट निर्भरता को परिभाषित करता है, इसलिए जब आप स्क्रिप्ट लोड करते हैं तो आपको इसे संतुष्ट करने की आवश्यकता होती है।

का तरीका यहां बताया

require.config(
{ 
    baseUrl: "/Scripts/", 
    paths:{ 
     jquery: "lib/jquery-2.0.3", 
     knockout: "lib/knockout-2.3.0", 
     komapping: "lib/knockout.mapping" 
    }, 
    shim: { 
     komapping: { 
      deps: ['knockout'], 
      exports: 'komapping' 
     } 
    } 
}); 

तो मेरे मामले में, मैं एक सूचकांक का उपयोग अपने मानचित्रण सामान लोड करना चाहिए है।जेएस फ़ाइल को निम्नलिखित

requirejs(['jquery', 'knockout', 'komapping'], function($, ko, komapping){ 
    ko.mapping = komapping; 
    //Do other stuff here 
}); 
+0

हाय हिसा, धन्यवाद! – Cheranga

+0

http://stackoverflow.com/questions/18925717/knockout-mapping-require-js-bug। मैंने इस समाधान का उपयोग करने की कोशिश की लेकिन त्रुटि प्राप्त हुई। – jmogera

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