【发布时间】:2014-09-29 02:08:55
【问题描述】:
不知道你能不能帮忙。刚开始使用 KnockoutJS,我在基于选定的 .我相信这对于训练有素的眼睛来说是非常明显的,但我似乎无法找到问题的原因。下面是我的实现。
public class RoleViewModel
{
public int RoleID { get; set; }
public string RoleName { get; set; }
public string Description { get; set; }
public int ApplicationID { get; set; }
public string ApplicationName { get; set; }
}
public class RoleIndexViewModel
{
public List<RoleViewModel> RolesList { get; set; }
public RoleViewModel Rvm { get; set; }
}
Index.cshtml 下面
@model ExpensesOrganiser4.ViewModels.RoleIndexViewModel
@section scripts{
@Scripts.Render("~/bundles/jqueryval")
@Scripts.Render("~/bundles/jqueryui")
<script src="~/Scripts/knockout-2.1.0.js" type="text/javascript"></script>
<script src="~/Scripts/knockout.mapping-latest.js" type="text/javascript"></script>
<script src="~/Scripts/Application/role.js" type="text/javascript"></script>
<script type="text/javascript">
RoleVM.ViewModel = ko.mapping.fromJS(@Html.Raw(Json.Encode(Model)));
</script>
}
<table>
<tr>
<th>@Html.DisplayNameFor(model => model.Rvm.RoleName)</th>
<th>@Html.DisplayNameFor(model => model.Rvm.Description)</th>
<th>@Html.DisplayNameFor(model => model.Rvm.ApplicationName)</th>
</tr>
@foreach (var item in Model.RolesList) {
<tr data-bind="click: GetSelectedRole" id="updtr">
<td>@Html.DisplayFor(modelItem => item.RoleName)</td>
<td>@Html.DisplayFor(modelItem => item.Description)</td>
<td>@Html.DisplayFor(modelItem => item.ApplicationName)</td>
</tr>
}
</table>
<table data-bind="visible: ReadOnlyMode">
<tr>
<td><label for="RoleID">Role ID:</label></td>
<td><input data-bind="value: RoleID()" type="text" id="RoleID" /></td>
</tr>
<tr>
<td><label for="RoleName">Role Name:</label></td>
<td><input data-bind="value: RoleName()" type="text" id="RoleName" /></td>
</tr>
<tr>
<td><label for="Description">Role Description:</label></td>
<td><input data-bind="value: Description()" type="text" id="Description" /></td>
</tr>
<tr>
<td><label for="ApplicationName">Application:</label></td>
<td><input data-bind="value: ApplicationName()" type="text" id="ApplicationName" /></td>
</tr>
</table>
淘汰赛的定义
var RoleVM = {
EditFields: ko.observable(false),
ReadOnlyMode: ko.observable(true),
DisplayEditRoleButton: ko.observable(true),
DisplayUpdateRoleButton: ko.observable(false),
RoleID: ko.observable($("#RoleID").val()),
RoleName: ko.observable($("#RoleName").val()),
OriginalRoleName: ko.observable($("#RoleName").val()),
Description: ko.observable($("#Description").val()),
OriginalDescription: ko.observable($("#Description").val()),
ApplicationName: ko.observable($("#ApplicationName").val()),
OriginalApplicationName: ko.observable($("#ApplicationName").val()),
MessageBox: ko.observable(""),
SelectedRow: ko.observable(),
GetSelectedRole: function (roleData) {
RoleVM.RoleID(roleData.RoleID);
RoleVM.RoleName(roleData.RoleName);
RoleVM.Description(roleData.Description);
RoleVM.ApplicationName(roleData.ApplicationName);
}
};
function roleData(data) {
this.RoleID = ko.observable(data.RoleID);
this.RoleName = ko.observable(data.RoleName);
this.Description = ko.observable(data.Description);
this.ApplicationName = ko.observable(data.ApplicationName);
}
ko.applyBindings(RoleVM);
当我点击 时,我会在文本框中看到以下内容
function c(){if(0<arguments.length){if(!c.equalityComparer||!c.equalityComparer
(d,arguments[0]))c.I(),d=arguments[0],c.H();return this}a.U.La(c);return d}"
我知道如果我调用一个可观察对象,我需要将它作为一个函数调用,但是当我执行以下操作时,文本框包含空字符串。
GetSelectedRole: function (roleData) {
RoleVM.RoleID(roleData.RoleID());
RoleVM.RoleName(roleData.RoleName());
RoleVM.Description(roleData.Description());
RoleVM.ApplicationName(roleData.ApplicationName());
}
非常感谢任何建议。 谢谢
【问题讨论】:
-
当你点击一行时你想发生什么?是否应该使用单击行中的数据填充只读部分?
-
是的,没错。
标签: c# javascript asp.net-mvc-4 knockout.js