খয়রাত
এটি কিছুক্ষণ হয়ে গেছে এবং আমার এখনও কয়েকটা অসামান্য প্রশ্ন রয়েছে। আমি আশা করি একটি অনুগ্রহ যোগ করে এই প্রশ্নগুলির উত্তর মিলবে।
- আপনি কীভাবে নকআউট.জেএস সহ এইচটিএমএল সহায়ক ব্যবহার করবেন
এটিকে কাজ করতে দস্তাবেজের প্রস্তুত কেন প্রয়োজন ছিল (আরও তথ্যের জন্য প্রথম সম্পাদনা দেখুন)
আমি যদি আমার ভিউ মডেলগুলির সাথে নকআউট ম্যাপিং ব্যবহার করি তবে কীভাবে আমি এই জাতীয় কিছু করব? ম্যাপিংয়ের কারণে আমার কোনও ফাংশন নেই।
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 };
উদাহরণস্বরূপ আমি প্লাগইনগুলি ব্যবহার করতে চাই আমি পর্যবেক্ষণযোগ্যদের রোলব্যাক করতে সক্ষম হতে চাই যেন কোনও ব্যবহারকারী কোনও অনুরোধ বাতিল করে দেয় যাতে আমি সর্বশেষ মানটিতে ফিরে যেতে সক্ষম হতে চাই। আমার গবেষণা থেকে মনে হয় এটি সম্পাদনাযোগ্যদের মতো প্লাগইন তৈরি করে লোকেরা অর্জন করেছে
আমি যদি ম্যাপিং ব্যবহার করি তবে আমি কীভাবে এরকম কিছু ব্যবহার করব? আমি সত্যিই এমন কোনও পদ্ধতিতে যেতে চাই না যেখানে আমার ভিউ ম্যানুয়াল ম্যাপিংয়ের ক্ষেত্রে আমি প্রতিটি এমভিসি ভিউমড ফিল্ডটি কেও মডেল ফিল্ডে ম্যাপ করছিলাম কারণ আমি যতটা সম্ভব কম ইনলাইন জাভাস্ক্রিপ্ট চাই এবং এটি ঠিক দ্বিগুণ বলে মনে হচ্ছে এবং এটিই আমি কেন এই ম্যাপিং পছন্দ করি।
আমি উদ্বিগ্ন যে এই কাজটি সহজ করার জন্য (ম্যাপিং ব্যবহার করে) আমি প্রচুর কেও শক্তি হারাব তবে অন্যদিকে আমি উদ্বিগ্ন যে ম্যানুয়াল ম্যাপিংটি কেবলমাত্র অনেক কাজ হবে এবং আমার দৃষ্টিভঙ্গিতে খুব বেশি তথ্য থাকবে এবং ভবিষ্যতে রক্ষণাবেক্ষণ করা আরও শক্ত হয়ে উঠবে (বলুন আমি যদি এমভিসি মডেলের কোনও সম্পত্তি অপসারণ করি তবে আমাকে কেও ভিউমডেলটিতেও স্থানান্তর করতে হবে)
আসল পোস্ট
আমি এসপ নেটওয়্যার এমভিসি 3 ব্যবহার করছি এবং নকআউটটি দেখতে বেশ সুন্দর লাগছে বলে মনে হচ্ছে তবে এটি কীভাবে কাজ করে তা অ্যাপ নেটওয়্যার এমভিসি বিশেষত মডেলগুলির সাথে দেখাতে খুব কঠিন সময় কাটাচ্ছে।
আমার জন্য এখনই আমি এই জাতীয় কিছু করি
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; }
}
আমার একটি ভিএম থাকবে যার কিছু প্রাথমিক বৈশিষ্ট্য রয়েছে যেমন কোর্সনাম এবং এটির উপরে কিছু সাধারণ বৈধতা থাকবে। ভিএম মডেলটিতে প্রয়োজনে এটিতে অন্যান্য ভিউ মডেলও থাকতে পারে।
আমি এই ভিএমটি তখন ভিউতে পাস করতাম যদি আমি এইচটিএমএল সহায়তা ব্যবহারকারীর কাছে এটি প্রদর্শন করতে সহায়তা করতাম।
@Html.TextBoxFor(x => x.CourseName)
ছাত্র ভিউ মডেলগুলির সংগ্রহ থেকে ডেটা বের করার জন্য আমার কাছে কিছু ফোরচ লুপ বা কিছু থাকতে পারে।
তারপরে আমি ফর্মটি জমা দেওয়ার সময় আমি jquery ব্যবহার করব serialize array
এবং এটি একটি নিয়ামক অ্যাকশন পদ্ধতিতে প্রেরণ করব যা এটিকে আবার ভিউমডেলের সাথে আবদ্ধ করবে।
নকআউট.জেএস সহ এটি এখন অন্যরকম যেমন আপনি এখন এর জন্য ভিউ মডেল পেয়েছেন এবং আমি যে সমস্ত উদাহরণ দেখেছি সেগুলি থেকে তারা এইচটিএমএল সহায়ক ব্যবহার করে না।
আপনি কীভাবে নকআউট.জেএস সহ এমভিসির এই দুটি বৈশিষ্ট্যগুলি ব্যবহার করবেন?
আমি এই ভিডিওটি পেয়েছি এবং এটি সংক্ষেপে ( ভিডিওটির শেষ কয়েক মিনিট @ 18:48) মূলত একটি ইনলাইন স্ক্রিপ্ট রয়েছে যার মধ্যে নকআউট.জেএস ভিউমোডেল রয়েছে যা ভিউমোডেলে মানগুলি নির্ধারিত করে ভিউ মডেলগুলি ব্যবহার করার উপায় হিসাবে চলে।
এটি কি একমাত্র উপায়? আমার উদাহরণটিতে এর মধ্যে ভিউ মডেলগুলির সংকলন কীভাবে হবে? সমস্ত মান বের করে এনে নকআউট হিসাবে নির্ধারিত করার জন্য আমার কাছে কি ফোরচ লুপ বা কিছু থাকতে হবে?
এইচটিএমএল সহায়ক হিসাবে ভিডিও তাদের সম্পর্কে কিছুই বলে না।
এগুলি 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
সুতরাং আমার কাছে একটি প্রারম্ভিক পয়েন্ট রয়েছে বলে আমি অনুমান করি যে আমি যখন আরও কিছু খেলা চালিয়েছি এবং এটি কীভাবে কাজ করে তবে কমপক্ষে আপডেট হবে।
আমি ইন্টারেক্টিভ টিউটোরিয়ালগুলি দিয়ে যাওয়ার চেষ্টা করছি তবে পরিবর্তে একটি ভিউমডেল ব্যবহার করব।
কীভাবে এই অংশগুলি মোকাবেলা করবেন তা নিশ্চিত নন
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
};
সম্পাদনা 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));
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);
}