首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >仅从ko.observableArray发送更新的对象

仅从ko.observableArray发送更新的对象
EN

Stack Overflow用户
提问于 2017-05-18 19:32:00
回答 2查看 62关注 0票数 0

我如何从一个可观察的阵列中只发送更新的模型,而不是发送整个阵列?

代码语言:javascript
复制
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();
}

现在,我只想从信息更新的课程中获取特定的学生。假设当我们添加一个新的类时,我们可以在路上动态地添加新的学生。假设在添加新的学生之前,您必须验证以前的学生。当我得到那个特定的学生时,我想把那个学生的信息发送回服务器。

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2017-05-18 20:22:08

如果我没理解错的话,您可以使用"arrayChange“事件类型来获得完全更改(添加/删除)的项:

代码语言:javascript
复制
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");
票数 0
EN

Stack Overflow用户

发布于 2017-05-18 21:00:22

如果您想要获取已修改的学生列表,可以提供一个标志来标识学生对象中的对象是否已被修改。无论何时更新值,都可以使用.subscribe修改该标志。然后使用ko.computedko.pureComputed获取该列表。

此外,它还假定为observable

代码语言:javascript
复制
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);
});
代码语言:javascript
复制
<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>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44046576

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档