簡體   English   中英

使用關聯數組中的其他項計算值

[英]Compute value using other items in associative array

在過去的幾天里,我一直在努力解決該問題,希望大家能提供幫助。

我正在嘗試在關聯數組中存儲動態值,該關聯數組是使用同一數組中的其他2個值計算的。

這是代碼:

model.TimeLog = {
 StartTime: "2015-01-01T00:00:00",
 EndTime: "2015-01-01T00:00:00",
 TimeDifference: ko.pureComputed(function() {
  var from = StartTime() || "2015-01-01T00:00:00";
  from = new Date(from);
  var to = EndTime() || "2015-01-01T00:00:00";
  to = new Date(to);
  var difference;
  if ((to - from) >= 0)
    difference = to - from;
  else
    difference = 0;
  var timespan = +(difference / 1000 / 60 / 60).toFixed(2);
  return timespan;
 })
}

--------- Section of the HTML page referenced later -------------

<td><input type="text" data-bind="event {onchange: $root.calculateTimeSpan(this,EndTime)}"></input></td>
<td><input type="text" data-bind="event {onchange: $root.calculateTimeSpan(StartTime,this)}"></input></td>

目的是讓用戶選擇開始時間和結束時間(使用日期/日歷選擇器),然后在編輯任一日期字段時將時差(以小時為單位)顯示到只讀字段。

至於為什么要在此模型視圖中完成功能而不是直接在頁面上或在單獨的腳本文件中完成功能的原因,是因為在頁面上可以存在該模型的多個實例,因此我需要在每個實例上計算值。

其他一些信息可能會有所幫助:

  • 網頁在HTML5上運行,沒有較舊的版本
  • 淘汰賽JS v3.3.0
  • 專為最新版本的Chrome和Firefox設計; 沒有IE

我希望這對你們所有人來說都是足夠的信息。 如果沒有,請告訴我,我會盡力提供。

更新資料

  • 問題是只讀字段中未顯示任何值。 后端無錯誤,瀏覽器中只有錯誤“ ReferenceError:未定義StartTime”
  • 我相信StartTime和EndTime是全局變量。 訪問模型后,我可以在其他文件中訪問它們,即model.StartTime

我嘗試過的事情

  • 我沒有在模型上運行該函數,而是嘗試在html頁上使用一個單獨的javascript文件對一個函數進行數據綁定(請參見上文)

注意:html頁面使用一些自定義構建的標記,這些標記無法發布。 要訪問我的javascript文件中的函數,我需要使用'$ root。[function]'。 無需使用“ model。[key]”就可以訪問“ model”中的任何值。

由於我無法發布有關html頁面呈現方式的代碼示例或屏幕截圖,因此我將描述其正在使用的功能:

在我看來,這里有我的模型實例的集合/列表。 默認情況下,不顯示任何輸入字段,並且頁面底部始終固定有一個按鈕,允許用戶生成模型的新實例。 當用戶創建一個新實例時,該模型實例存儲在一個數組中(在我的情況下稱為TimeLogGroup) 當用戶保存頁面時,該組TimeLogGroup被傳遞到后端以存儲在數據庫中。

因此,要重申此問題,請參考上面的段落,在模型的每個實例上都有一個開始和結束時間,我需要在不可編輯/只讀字段中計算並顯示時間跨度。 我有要計算,測試和嘗試的代碼,但是無法在必填字段中顯示值。

希望這對您有所幫助。

僅當您訪問的觀察值更新時,您的計算結果才會更新。 您需要StartTime和EndTime是可觀察的。 您還需要使用它們的限定名稱來引用它們。

更新:哦,我忘記了計算值必須在對象外部定義,因為它將在創建時進行評估,並且對象成員將不存在。

model.TimeLog = {
 StartTime: ko.observable("2015-01-01T00:00:00"),
 EndTime: ko.observable("2015-01-01T00:00:00")
};
model.TimeLog.TimeDifference = ko.pureComputed(function() {
  var from = new Date(model.TimeLog.StartTime());
  var to = new Date(model.TimeLog.EndTime());
  var difference;
  if ((to - from) >= 0)
    difference = to - from;
  else
    difference = 0;
  var timespan = +(difference / 1000 / 60 / 60).toFixed(2);
  return timespan;
 });

暫無
暫無

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

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