커서를 열 머리글이 아닌 열 셀 위에 놓으면 mouseover 이벤트에 대한 테이블의 열을 바인딩하려고하는데 확장 된 세부 정보가 만들어집니다 (StrTimeDesc)가 표시됩니다. 하지만 실행하면 첫 번째 열 (작업 날짜 열) 만 표시되고 나머지는 비어 있습니다.테이블의 열에서 knockout을 사용하여 바인딩하는 방법
var Action =
{
Timesheet_headers: ko.observableArray([]),
workDate: ko.observable(),
Schedule_description: ko.observable(),
StrSchedDesc: ko.observable(),
StrTimeDesc: ko.observable(),
IsTog: ko.observable(false),
detailsEnabled: ko.observable(false),
enableDetails: function() {
this.IsTog(true);
},
disableDetails: function() {
this.IsTog(false);
}
}
는 바인딩이 이미 완료 적용
<table class="table">
<thead>
<tr>
<th>Work Date</th>
<th>Schedule Description</th>
</tr>
</thead>
<tbody data-bind="foreach: Timesheet_headers">
<tr>
<td data-bind="text: workDate"></td>
<td>
<div data-bind="event: { mouseover: @parent.enableDetails, mouseout: @parent.disableDetails }">
<span data-bind="text: StrSchedDesc"></span>
</div>
<div data-bind="visible: IsTog">
<span data-bind="text: StrTimeDesc"></span>
</div>
</td>
</tr>
</tbody>
</table>
여기 내 녹아웃입니다 :
여기 내이다. 나는 SO가 많은 코드와 적은 세부 사항으로 게시물을 허용하지 않기 때문에 그 부분을 생략했다. mouseover 바인딩을 제거하면 테이블이 정상적으로 실행됩니다. 그 mouseover 바인딩은 knockoutjs 사이트에서 왔습니다. UPDATE
: 여기 내 클래스 여기
public class Timesheet_header
{
[Key]
public System.long AUTO_ID { get; set; }
public System.Int64 Employee_id { get; set; }
public System.Int16 Schedule_id { get; set; }
[Required]
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
public DateTime Work_date { get; set; }
public string StrSchedDesc { get; set; }
public string StrTimeDesc { get; set; }
public bool IsTog { get; set; }
public Timesheet_header()
{
IsTog = false;
}
}
내 데이터 액세스 (이 성공적으로 DB에서 모든 레코드를 검색)
public static List<Timesheet_header> GetLogs(long Employee_id, DateTime DateFrom, DateTime DateTo)
{
var items = new List<Timesheet_header>();
var command = new SqlCommand();
try
{
command.CommandText = "GetTimeSheetHeaders";
command.CommandType = CommandType.StoredProcedure;
command.Parameters.AddWithValue("@Employee_id", Employee_id).Direction = ParameterDirection.Input;
command.Parameters.AddWithValue("@DateFrom", DateFrom).Direction = ParameterDirection.Input;
command.Parameters.AddWithValue("@DateTo", DateTo).Direction = ParameterDirection.Input;
DataTable dt = SqlHelper.GetData(command);
if (dt.Rows.Count <= 0) return items;
foreach (DataRow row in dt.Rows)
{
Timesheet_header item = new Timesheet_header();
item.AUTO_ID = (row["AUTO_ID"]).GetLong();
item.Employee_id = (row["Employee_id"]).GetLong();
item.Work_date = (row["Work_date"]).GetDbDate();
item.StrSchedDesc = row["Schedule_description"].GetString();
item.StrTimeDesc = " From " + row["Time_from"].GetString() + " - To " + row["Time_to"].GetString();
items.Add(item);
}
}
catch (Exception s)
{
return new List<Timesheet_header>();
}
return items;
}
가 나는 또한
위에 내보기 및 녹아웃 업데이트입니다
확인을, 나는 내가 한 일에 내가 응용 프로그램, 호버 작품, 당신에게 감사를 실행했습니다 – Kokombads
timesheetheaders에 대해 업데이트 할 수 있습니다. 그러나 이것은 일어난 일입니다 : "Uncaught TypeError : item.IsTog가 함수가 아닙니다." – Kokombads
@Kokombads [this answer] (https://stackoverflow.com/a/46482837/3082296)와 같은 뷰 모델을 변경해야합니다. 이 질문의 구조는 당신과 정확히 같습니다. [바이올린] (https://jsfiddle.net/adigas/6gyp8vgn/)을 확인하십시오. – adiga