簡體   English   中英

僅從ko.observableArray發送更新的對象

[英]Sending only the updated object from ko.observableArray

如何僅從可觀察數組發送更新的模型,而不發送整個數組?

var student = function (){
    this.studentId=0;
    this.firstName=ko.obserable();
    this.lastName=ko.obserable();
}
var course= function (){
    this.courseId=0;
    this.students=ko.obserableArray([]);
    this.Name=ko.obserable();
}

現在,我只想從課程中獲取該信息的特定學生。 假設添加新課程時,我們可以在旅途中動態添加新學生。 假設您必須在添加新學生之前驗證前一個學生。 當我收到那個特定的學生時,我想將該學生的信息發送回服務器。

謝謝。

如果我理解您的任務正確,則可以使用“ arrayChange”事件類型來獲取完全更改(添加/刪除)的項目:

sourceArray = ko.observableArray();
sourceArray.subscribe(function (changes) {
        changes.forEach(function(arrayChange) {
            if(arrayChange.status === 'added') {
                // some code on add
            } else if(arrayChange.status === 'deleted') {
                // some code on delete
            }
        });
    }, null, "arrayChange");

如果要獲取已被修改的學生的列表,則可以提供一個標志來標識對象是否已在學生對象中被修改。 每當值更新時,請使用.subscribe修改該標志。 然后使用ko.computedko.pureComputed獲取該列表。

它也應該是observable

 var student = function (id, firstName, lastName) { var self = this; self.hasChanged = ko.observable(false); var modified = function(){ self.hasChanged(true); }; self.studentId = ko.observable(id); self.firstName = ko.observable(firstName); self.firstName.subscribe(modified); self.lastName = ko.observable(lastName); self.lastName.subscribe(modified); } var course= function (){ var self = this; self.courseId = 0; self.students = ko.observableArray([new student(1, "Cristiano", "Ronaldo"), new student(2, "Lionel", "Messi")]); self.modifiedStudent = ko.computed(function(){ return ko.utils.arrayFilter(self.students(), function(student) { return student.hasChanged(); }); }, self); self.Name = ko.observable("Programming 101"); } $(document).ready(function () { var myViewModel = new course(); ko.applyBindings(myViewModel); }); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script> List of all students: <div data-bind="foreach: students"> <div> <span data-bind="text: studentId"></span> <input type="text" data-bind="value: firstName" /> <input type="text" data-bind="value: lastName" /> </div> </div> <br/> List of students which has been modified: <div data-bind="foreach: modifiedStudent"> <div> <span data-bind="text: studentId"></span> <input type="text" data-bind="value: firstName" readonly /> <input type="text" data-bind="value: lastName" readonly /> </div> </div> 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM