0

乡亲

我正在尝试显示内联表单来更新记录。请 在此处查看小提琴

SetAcceptItem方法工作正常,我可以通过 Ajax 更新数据库记录,并且页面加载后修改的值显示在屏幕上。

但是更新的值没有被观察到并重新显示在屏幕上。我不确定这里有什么问题!

我想在不重新加载页面的情况下在屏幕上显示更新的值。

item.update(edited.title)SetAcceptItem更新值。

Item = function (data) {
    var self = this;
    self.title = ko.observable(data.title);
    self.searchTerm = ko.observable(data.searchTerm);
    self.update = function (data) {
        self.title(data.title);
       self.searchTerm(data.searchTerm);
    };
};

我的项目中的 Ajax 代码

        data: sentData,
        success: function (data) {
            //load data
            var recData = data;
            self.item(recData);
        },
        error: function (errorMessage) {

        }

让我知道是否需要添加更多详细信息


编辑

这是我的KO 代码,只是想知道为什么 item.update(edited);没有在 UI 上更新值

Item = function (data) {
    var self = this;
    self.title = ko.observable(data.title);
    self.searchTerm = ko.observable(data.searchTerm);
    self.update = function (data) {
        self.title(data.title);
        self.searchTerm(data.searchTerm);
        alert(self.title());
    };
};

var ViewModel = function (items) {
    var self = this;

    self.items = ko.observableArray(ko.utils.arrayMap(items, function (data) {
        return new Item(data);
    }));

    self.TempItem ;

    //selected item
    self.selectedItem = ko.observable();

    self.itemForEditing = ko.observable();

    this.GetSelectItem = function (item) {
        self.selectedItem(item);
        self.itemForEditing(new Item(ko.toJS(item)));
        //self.itemForEditing(item);
    };

    this.SetAcceptItem = function (item) {
        self.TempItem = item;
        var selected = ko.toJS(self.selectedItem());
        var edited = ko.toJS(self.itemForEditing());
        //alert(self.TempItem.title());  //edited value
        //alert(selected.title);  //old value
        //alert(edited.title); //edited value
        //alert(selected.title);  //? it is old  value
        item.update(edited);
        //write ajax query  here to udpate in database
        self.itemForEditing(null);
    };

    this.RemoveItem = function () {
        self.selectedItem(null);
        self.itemForEditing(null);
    };
};

ko.applyBindings(new ViewModel([{
    title: "walls",
    searchTerm: "walls1"
}, {
    title: "health",
    searchTerm: "health2"
}]));
4

2 回答 2

0

你不应该打电话update(data)吗?

    success: function (data) {
        //load data
        var recData = data;
        self.update(recData);
    },
于 2013-07-24T17:11:58.403 回答
0

设法解决问题。小提琴

使用knockmeout网站上的 guard-your-model-accept-or-cancel-edits中提到的临时对象选项 。

AcceptMethod 更改为如下所示

1] 在 vi​​ewmodel.Array 中查找请求的 ID

2]如果找到更新该数组

this.SetAcceptItem = function (item) {
        var selected = ko.toJS(self.selectedItem());
        var edited = ko.toJS(self.itemForEditing());
        var targetId = selected.title;
        var recordFound = ko.utils.arrayFirst(self.items(), function (item) {
            return item.title() == targetId;
        });

        if (recordFound) {
            recordFound.title(edited.title);
        }
        //write ajax query  here to udpate in database
        self.itemForEditing(null);
    };
于 2013-07-25T10:52:31.083 回答