第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么以這種方式更改此格式化函數會導致 Knockout 綁定開始工作?

為什么以這種方式更改此格式化函數會導致 Knockout 綁定開始工作?

函數式編程 2023-09-07 16:55:25
我在頁面上有一個元素,如下所示:<span data-bind="text: FormattedCountOfPeople"></span>計算它的函數我首先是這樣寫的:self.FormattedCountOfPeople = ko.computed(function () {    if(!self.PeopleCountFormatString)                 //a string like "{0} people in the conference", but set by a service call so starts out undefined      return "not set yet";    let sizes = self.Params().PermittedCounts();      //an array of discrete permitted sizes e.g. [2, 10, 30]    let size = self.Params().ChosenCount();           //value set by a jquery slider, could be any double, even 5.7435 - to achieve smooth dragging of the slider it has a small step but snaps to a permitted count    let n = nearest(size, sizes);                     //a "round to nearest" helper function that given args of e.g. (5.7345, [2, 10, 30]) will pick 2 because 5.7345 is nearer to 2 than 10    let s = self.PeopleCountFormatString.csFormat(n); //csformat is a helper function that performs C# style string Formatting e.g. "{0} people".csFormat(2) -> "2 people"    return s;});我繞了好幾個小時,想知道為什么無論滑塊設置是什么,頁面上的文本都卡在“尚未設置”處,但是作為測試添加的另一個元素正在完美更新,而其他地方有一個不同的<span data-bind="text: Params().ChosenCount"></span>滑塊使用類似的邏輯設置小時和分鐘的持續(xù)時間就可以了://if the user picks 61.2345, it rounds to 60, then returns "1 hour". Picking 74.11 rounds to 75 then returns "1 hour, 15 min"self.FormattedDurationText = ko.computed(function () {    var duration = self.Params().ChosenDuration();      duration = Math.round(duration / 15) * 15;});在不同的地方添加一些控制臺日志記錄,很明顯,在第一次調用FormattedCountOfPeople返回“尚未設置”后,FormattedCountOfPeople拖動人數統(tǒng)計滑塊時再也不會被調用。直接綁定到原始數據的另一個范圍Params().ChosenCount會不斷更新,因此值可以正常變化。類似地,綁定到的滑塊Params().ChosenDuration正在更新值,并且FormattedDuration()每次值更改時都會被調用,并提供一個新的格式化字符串以進入范圍
查看完整描述

1 回答

?
慕標琳琳

TA貢獻1830條經驗 獲得超9個贊

當您在計算中引用可觀察量時,KO 將在內部訂閱該可觀察量,因此每次可觀察量發(fā)生變化時都會重新評估計算值。

當您在計算開始時執(zhí)行此操作時:

if(!self.PeopleCountFormatString)
  return "not set yet";

并且self.PeopleCountFormatString 不是可觀察的(它似乎不是),由于 return 語句,您的計算不會進一步評估,訂閱永遠不會ChosenCount發(fā)生,并且因為PeopleCountFormatString它本身也不是可觀察的,所以計算的不是稍后重新評估何時PeopleCountFormatString確實有價值。因此,它的價值將永遠保持“尚未確定”。

更新后的計算值可以工作,因為您立即引用其他可觀察值,因此 KO 將在內部訂閱這些可觀察值,并在可觀察值發(fā)生變化時重新評估計算值。


查看完整回答
反對 回復 2023-09-07
  • 1 回答
  • 0 關注
  • 127 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號