gpt4 book ai didi

javascript - observableArray 替换不更新 UI

转载 作者:行者123 更新时间:2023-11-29 14:53:01 27 4
gpt4 key购买 nike

你们能帮我调试一下为什么当我调用 replace 时它没有反射(reflect)在 UI 上吗?结帐功能中的 ****** 是我调用替换的地方。在索引中,我循环遍历我的 observableArray 以显示项目。

当我刷新页面时,当前的 UI 将被反射(reflect)出来。

谢谢!

JS

$(function(){
ko.applyBindings(new ViewModelBooks());
});


function Book(title, user_id, book_id)
{
this.title = ko.observable(title);
this.user_id = ko.observable(user_id);
this.book_id = ko.observable(book_id);
}

function ViewModelBooks(){
var self = this;
self.library = ko.observableArray();
getBooks();

// Click event for checking out a book
self.checkOutBook = function(obj){
checkOutBook(obj, "Book");
};


function checkOutBook(book, list_name)
{
// Get current user
alert(self.library.indexOf(book));
var user_id = $().SPServices.SPGetCurrentUser({
fieldName: "ID",
debug: false
});
// Prep for update get all books
var item_type = getItemType(list_name);

var item = {
"UserID": user_id,
}

var updated_book = book;
updated_book.user_id = user_id;

getListItemWithId(book.book_id(), function(data){
var temp_uri = data.__metadata.uri;
$.ajax({
url: temp_uri,
type: "POST",
contentType: "application/json",
data: JSON.stringify(item),
headers: {
"Accept": "application/json;odata=verbose",
"X-RequestDigest": $("#__REQUESTDIGEST").val(),
"X-HTTP-Method": "MERGE",
"If-Match": data.__metadata.etag
},
success: function (data){
console.log('Success!');
self.library.replace(book, updated_book); ***************
},
error: function(data){
alert('Error has occured');
}
});
}, function (data) { alert('Error has occured'); });
}

// Query all books
function getBooks(){
var url = 'http://portal.internal.urs.org/tools_services/training_library/_vti_bin/listdata.svc/Book';
$.getJSON(url, function(data){
for (var i = 0; i < data.d.results.length; i++){
var book = data.d.results[i];
var user_id= null;

if (book.UserID != null){
user_id = book.UserID;
}
self.library.push(new Book(book.Title, user_id, book.Id));
}
});
}

HTML

<table class="LibraryTable">
<thead><tr>
<th>Title</th><th>Check Out</th>
</tr></thead>
<tbody data-bind="foreach: library">
<tr><td data-bind="text: title"></td>
<td>
<span data-bind="ifnot: user_id">
<button class="btn_checkout" type="button"
data-bind="click: $parent.checkOutBook">Check Out</button>
</span>
<span data-bind="if: user_id">
Checked Out
</span>
</td>
</tr>
</tbody>
</table>

最佳答案

我建议使用 observableArrays 为您实现的标准拼接方法

self.library.splice(self.library.indexOf(book), 1, updated_book);

关于此的文档以及所有其他可观察数组实现的好东西是 here

关于javascript - observableArray 替换不更新 UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22486059/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com