इनाम
थोड़ी देर हो गई है और मेरे पास अभी भी कुछ बकाया सवाल हैं। मुझे आशा है कि एक इनाम जोड़कर शायद इन सवालों का जवाब मिल जाएगा।
- आप html सहायकों को नॉकआउट.जे के साथ कैसे उपयोग करते हैं
यह काम करने के लिए दस्तावेज़ क्यों तैयार था (अधिक जानकारी के लिए पहले संपादन देखें)
अगर मैं अपने व्यू मॉडल के साथ नॉकआउट मैपिंग का उपयोग कर रहा हूं तो मैं ऐसा कुछ कैसे करूं? चूंकि मैपिंग के कारण मेरा कोई फंक्शन नहीं है।
function AppViewModel() { // ... leave firstName, lastName, and fullName unchanged here ... this.capitalizeLastName = function() { var currentVal = this.lastName(); // Read the current value this.lastName(currentVal.toUpperCase()); // Write back a modified value };
मैं प्लगइन्स का उपयोग करना चाहता हूं उदाहरण के लिए मैं ऑब्जर्वर को रोलबैक करने में सक्षम होना चाहता हूं जैसे कि एक उपयोगकर्ता एक अनुरोध को रद्द करता है जो मैं पिछले मूल्य पर वापस जाने में सक्षम होना चाहता हूं। मेरे शोध से यह प्रतीत होता है कि लोग संपादन जैसे प्लगइन्स बना रहे हैं
अगर मैं मैपिंग का उपयोग कर रहा हूं तो मैं कुछ इस तरह कैसे उपयोग करूं? मैं वास्तव में ऐसी पद्धति पर नहीं जाना चाहता जहाँ मेरे विचार में मेरी मैनुअल मैपिंग हो, मैं प्रत्येक MVC दृश्य क्षेत्र को KO मॉडल फ़ील्ड में मैप कर सकता था क्योंकि मैं यथासंभव कम इनलाइन जावास्क्रिप्ट चाहता हूँ और यह सिर्फ काम की तरह लगता है और वह है मुझे वह मैपिंग क्यों पसंद है।
मुझे चिंता है कि इस काम को आसान बनाने के लिए (मैपिंग का उपयोग करके) मैं बहुत सारी KO शक्ति खो दूंगा, लेकिन दूसरी तरफ मुझे इस बात की चिंता है कि मैनुअल मैपिंग बस बहुत काम की होगी और मेरे विचार में बहुत अधिक जानकारी होगी और भविष्य में और मुश्किल हो सकता है (यदि मैं एमवीसी मॉडल में एक संपत्ति को हटाता हूं तो इसे को को व्यूमोडल में भी स्थानांतरित करना होगा)
मूल पोस्ट
मैं asp.net mvc 3 का उपयोग कर रहा हूं और मैं नॉकआउट में देख रहा हूं क्योंकि यह बहुत अच्छा लग रहा है, लेकिन मुझे यह पता लगाने में मुश्किल समय हो रहा है कि यह asp.net mvc के साथ कैसे काम करता है विशेष रूप से मॉडल देखें।
मेरे लिए अभी मैं कुछ ऐसा करता हूं
public class CourseVM
{
public int CourseId { get; set; }
[Required(ErrorMessage = "Course name is required")]
[StringLength(40, ErrorMessage = "Course name cannot be this long.")]
public string CourseName{ get; set; }
public List<StudentVm> StudentViewModels { get; set; }
}
मेरे पास एक Vm होगा जिसमें कोर्सनाम की तरह कुछ बुनियादी गुण हैं और इसके शीर्ष पर कुछ सरल सत्यापन होगा। यदि आवश्यक हो तो Vm मॉडल में अन्य दृश्य मॉडल भी हो सकते हैं।
मैं तब इस Vm को व्यू में पास करूंगा मैं उपयोगकर्ता को इसे प्रदर्शित करने में मदद करने के लिए html हेल्पर्स का उपयोग करूंगा।
@Html.TextBoxFor(x => x.CourseName)
छात्र दृश्य मॉडल के संग्रह से डेटा प्राप्त करने के लिए मेरे पास कुछ फ़ॉरच लूप या कुछ हो सकते हैं।
फिर जब मैं फॉर्म जमा करूंगा तो मैं jquery का उपयोग करूंगा serialize array
और इसे एक नियंत्रक एक्शन विधि में भेजूंगा जो इसे व्यूमॉडल में वापस बांध देगा।
नॉकआउट के साथ। यह सब अलग है क्योंकि अब आपको इसके लिए व्यूमॉडल मिल गए हैं और सभी उदाहरणों से मैंने देखा कि वे htmlers का उपयोग नहीं करते हैं।
आप MVC की इन 2 विशेषताओं को नॉकआउट.जे के साथ कैसे उपयोग करते हैं?
मुझे यह वीडियो मिला और यह संक्षेप में ( वीडियो के अंतिम कुछ मिनट @ 18:48) मूल रूप से एक इनलाइन स्क्रिप्ट के द्वारा व्यूमोडल का उपयोग करने के लिए जाता है जिसमें नॉकआउट। जेएस व्यूमॉडल है जो व्यूकोड में मूल्यों को असाइन करता है।
क्या ऐसा करने का एकमात्र तरीका है? इसमें मेरे विचार के संग्रह के साथ मेरे उदाहरण के बारे में कैसे? क्या मुझे सभी मूल्यों को बाहर निकालने और इसे नॉकआउट में असाइन करने के लिए एक फ़ॉरच लूप या कुछ करना होगा?
के रूप में html सहायकों के लिए वीडियो उनके बारे में कुछ नहीं कहता है।
ये 2 क्षेत्र हैं जो मुझे बाहर निकालने के लिए भ्रमित करते हैं क्योंकि बहुत से लोग इसके बारे में बात नहीं करते हैं और यह मुझे उलझन में छोड़ देता है कि प्रारंभिक मूल्यों और सबकुछ देखने को मिल रहा है जब कभी उदाहरण केवल कुछ कठिन-कोडित मूल्य उदाहरण है।
संपादित करें
मैं कोशिश कर रहा हूं कि डारिन दिमित्रोव ने क्या सुझाव दिया है और यह काम करने लगता है (मुझे हालांकि उनके कोड में कुछ बदलाव करने थे)। मुझे यकीन नहीं है कि मुझे तैयार दस्तावेज़ का उपयोग क्यों करना था लेकिन किसी तरह सब कुछ इसके बिना तैयार नहीं था।
@model MvcApplication1.Models.Test
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<title>Index</title>
<script src="../../Scripts/jquery-1.5.1.js" type="text/javascript"></script>
<script src="../../Scripts/knockout-2.1.0.js" type="text/javascript"></script>
<script src="../../Scripts/knockout.mapping-latest.js" type="text/javascript"></script>
<script type="text/javascript">
$(function()
{
var model = @Html.Raw(Json.Encode(Model));
// Activates knockout.js
ko.applyBindings(model);
});
</script>
</head>
<body>
<div>
<p>First name: <strong data-bind="text: FirstName"></strong></p>
<p>Last name: <strong data-bind="text: LastName"></strong></p>
@Model.FirstName , @Model.LastName
</div>
</body>
</html>
मुझे इसे काम करने के लिए तैयार एक जॉकरी दस्तावेज़ के चारों ओर लपेटना पड़ा।
मुझे भी यह चेतावनी मिलती है। निश्चित नहीं है कि यह सब क्या है।
Warning 1 Conditional compilation is turned off -> @Html.Raw
इसलिए मेरे पास एक शुरुआती बिंदु है जो मुझे लगता है कि कम से कम तब अपडेट होगा जब मैंने कुछ और खेल किया हो और यह कैसे काम करता हो।
मैं इंटरेक्टिव ट्यूटोरियल के माध्यम से जाने की कोशिश कर रहा हूं, लेकिन इसके बजाय एक ViewModel का उपयोग करें।
सुनिश्चित नहीं हैं कि इन भागों से कैसे निपटा जाए
function AppViewModel() {
this.firstName = ko.observable("Bert");
this.lastName = ko.observable("Bertington");
}
या
function AppViewModel() {
// ... leave firstName, lastName, and fullName unchanged here ...
this.capitalizeLastName = function() {
var currentVal = this.lastName(); // Read the current value
this.lastName(currentVal.toUpperCase()); // Write back a modified value
};
संपादित करें २
मैं पहली समस्या का पता लगाने में सक्षम था। दूसरी समस्या के बारे में कोई सुराग नहीं। फिर भी हालांकि किसी को कोई विचार मिला?
@model MvcApplication1.Models.Test
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<title>Index</title>
<script src="../../Scripts/jquery-1.5.1.js" type="text/javascript"></script>
<script src="../../Scripts/knockout-2.1.0.js" type="text/javascript"></script>
<script src="../../Scripts/knockout.mapping-latest.js" type="text/javascript"></script>
<script type="text/javascript">
$(function()
{
var model = @Html.Raw(Json.Encode(Model));
var viewModel = ko.mapping.fromJS(model);
ko.applyBindings(viewModel);
});
</script>
</head>
<body>
<div>
@*grab values from the view model directly*@
<p>First name: <strong data-bind="text: FirstName"></strong></p>
<p>Last name: <strong data-bind="text: LastName"></strong></p>
@*grab values from my second view model that I made*@
<p>SomeOtherValue <strong data-bind="text: Test2.SomeOtherValue"></strong></p>
<p>Another <strong data-bind="text: Test2.Another"></strong></p>
@*allow changes to all the values that should be then sync the above values.*@
<p>First name: <input data-bind="value: FirstName" /></p>
<p>Last name: <input data-bind="value: LastName" /></p>
<p>SomeOtherValue <input data-bind="value: Test2.SomeOtherValue" /></p>
<p>Another <input data-bind="value: Test2.Another" /></p>
@* seeing if I can do it with p tags and see if they all update.*@
<p data-bind="foreach: Test3">
<strong data-bind="text: Test3Value"></strong>
</p>
@*took my 3rd view model that is in a collection and output all values as a textbox*@
<table>
<thead><tr>
<th>Test3</th>
</tr></thead>
<tbody data-bind="foreach: Test3">
<tr>
<td>
<strong data-bind="text: Test3Value"></strong>
<input type="text" data-bind="value: Test3Value"/>
</td>
</tr>
</tbody>
</table>
नियंत्रक
public ActionResult Index()
{
Test2 test2 = new Test2
{
Another = "test",
SomeOtherValue = "test2"
};
Test vm = new Test
{
FirstName = "Bob",
LastName = "N/A",
Test2 = test2,
};
for (int i = 0; i < 10; i++)
{
Test3 test3 = new Test3
{
Test3Value = i.ToString()
};
vm.Test3.Add(test3);
}
return View(vm);
}