【问题标题】:Populate textbox from <select> using Knockout使用 Knockout 从 <select> 填充文本框
【发布时间】:2014-08-08 15:46:56
【问题描述】:

您好,我想知道您是否可以帮忙。这个问题一直困扰着我。我正在尝试根据&lt;select&gt; 上的选定值填充文本框。 &lt;select&gt; 是从 MVC 后端填充的 self.ApplicationsList = ko.observableArray(data.ApplicationsList); ApplicationsList 只是 List&lt;Application&gt; 下面是我的实现。表中填充了角色行。单击一行时,&lt;input&gt;&lt;select&gt; 将填充正确的值。到现在为止还挺好。我希望进一步扩展,即当我在&lt;select&gt; 上选择不同的选项时,&lt;input id="ApplicationDescription&gt;" 应该填充基于self.ApplicationsList observable 的描述值。我只是无法理解这一点。

MVC 类

public class Application
{
    public int AppID { get; set; }
    public string AppName { get; set; }
    public string AppDesc { get; set; }
}

淘汰视图模型

var RoleVM = function (data) {
var self = this;

ko.mapping.fromJS(data, {}, self);

self.Roles = ko.observableArray(data.RolesList);
self.ApplicationsList = ko.observableArray(data.ApplicationsList);

self.RoleID = ko.observable();
self.RoleName = ko.observable();
self.Description = ko.observable();
self.ApplicationName = ko.observable();
self.ApplicationDescription = ko.observable();
self.ApplicationID = ko.observable();

self.GetSelectedRole = function (role) {
    self.RoleID(role.RoleID);
    self.RoleName(role.RoleName);
    self.Description(role.Description);
    self.ApplicationName(role.ApplicationName);
    self.ApplicationDescription(role.ApplicationDescription);
    self.ApplicationID(role.ApplicationID);
};

//New addition
self.SelectedApplication = ko.observable("");
self.ApplicationID.subscribe(function (value) {
    self.SelectedApplication(value);
});

};

查看

<table>
<thead>
    <tr>
        <th>RoleID</th>
        <th>RoleName</th>
        <th>Description</th>
        <th>ApplicationName</th>
        <th>ApplicationDescription</th>
        <th data-bind="visible: false"></th>
    </tr>
</thead>

<tbody data-bind="foreach: Roles">
    <tr data-bind="click: $root.GetSelectedRole" id="updtr">
        <td><span data-bind="text: RoleID"></span></td>
        <td><span data-bind="text: RoleName"></span></td>
        <td><span data-bind="text: Description"></span></td>
        <td><span data-bind="text: ApplicationName"></span></td>
        <td><span data-bind="text: ApplicationDescription"></span></td>
        <td data-bind="visible: false"><span data-bind="text: ApplicationID"></span></td>
    </tr>
</tbody>

<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><select data-bind="options: ApplicationsList, optionsText: 'AppName', optionsValue: 'AppID', value: ApplicationID"></select></td>
</tr>
<tr>
    <td><label for="ApplicationDescription">Application Description:</label></td>
    <td><input data-bind="value: SelectedApplication" type="text" id="ApplicationDescription" /></td>
</tr>

【问题讨论】:

    标签: c# javascript asp.net-mvc knockout.js


    【解决方案1】:

    我认为您需要订阅您的 ApplicationID。

    这将在 ApplicationID 可观察对象发生更改时触发,您可以更新其他可观察对象并执行您需要的任何其他操作。

    例如:

    self.ApplicationID.subscribe(function (val) {
    
        //Do what you need here to update other observables...
    
    });
    

    【讨论】:

    • 谢谢。以val 传递的内容是什么?如何从视图中调用 ApplicationID observable?
    • 我已经编辑了我的原始代码块以包含对 ApplicationID 的订阅逻辑。它将value 传递给SelectedApplication observable,我将input id="ApplicationDescription" 数据绑定到SelectedApplication。当我在&lt;select&gt; 上进行选择时,它会将&lt;option&gt; 的值放入input。我正朝着正确的方向前进,但是如何将 option 值与 self.ApplicationsList.AppDesc 属性相关联,以便加载所选应用程序的描述?
    • 这是推荐的吗? self.SelectedApplication(self.ApplicationsList()[value-1].AppDesc);
    猜你喜欢
    • 1970-01-01
    • 2023-03-27
    • 2013-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-16
    相关资源
    最近更新 更多