【问题标题】:show selected item from dropdown as text binding将下拉列表中的选定项目显示为文本绑定
【发布时间】:2013-07-14 09:31:52
【问题描述】:

我只是创建一个选择列表绑定如下

<select id="listingstatus"   data-bind="options: ListingTypeArrary, optionsText: 'Text', optionsValue: 'Value', selectedOptions: ListingType" ></select>

我的模型

var listArray = JSON.parse([{
    "Selected": false,
    "Text": "Commercial",
    "Value": "4"
}, {
    "Selected": false,
    "Text": "Residential",
    "Value": "5"
}]);
self.ListingTypeArrary = ko.observableArray();
$.each(listArray, function (index, value) {

    var obj = {};
    obj["Text"] = value.Text;
    obj["Value"] = value.Value;
    self.ListingTypeArrary.push(obj);

});

self.ListingType = ko.observable('@Model.ListingTypeId'); // @Model.ListingTypeId will be equals to 5

完成这个淘汰赛后,我的下拉/选择列表完美呈现。但我有一个要求,我不必显示下拉列表,我只需要将所选项目显示为文本。任何人都可以帮助我吗?

提前致谢。

【问题讨论】:

标签: knockout.js knockout-2.0


【解决方案1】:

如果我理解正确,一旦用户做出选择,您希望 &lt;select&gt; 消失,并在其位置出现一个文本标签。

您必须根据选定的Value 计算该标签,然后有条件地显示&lt;select&gt; 或文本标签。

HTML

<!-- ko ifnot: SelectedListingText -->
<select id="listingstatus" data-bind="
    options: ListingTypeArray,
    optionsText: 'Text',
    optionsValue: 'Value',
    value: ListingType"></select>
<!-- /ko -->

<!-- ko if: SelectedListingText -->
<span data-bind="text: SelectedListingText"></span>
<!-- /ko -->

Javascript

原始数据

var listArray = [
  {
    "Selected": false,
    "Text": "Commercial",
    "Value": "4"
  },
  {
    "Selected": false,
    "Text": "Residential",
    "Value": "5"
  }
];

选择选项

// Synthesize the listing type array for the select
ListingTypeArray = ko.observableArray([{ Text: 'Choose one', Value: null }]);
$.each(listArray, function (index, value) {
    var obj = {};
    obj["Text"] = value.Text;
    obj["Value"] = value.Value;
    ListingTypeArray.push(obj);
});

所选选项的存储

// The chosen listing type
ListingType = ko.observable();

计算出来的文本标签

// Compute the label text based on the selected Value
SelectedListingText = ko.computed(function () {
  type = ListingType();
  if(!type) return;

  // Find the text associated with this type
  var foundListingTypeName;
  $.each(listArray, function (index, listingType) {
    if(listingType.Value == type) {
      foundListingTypeName = listingType.Text;
      return false;
    }
  });

  return foundListingTypeName;
});

实际操作中:http://jsfiddle.net/steveluscher/rmnMt/

【讨论】:

猜你喜欢
  • 2016-05-10
  • 2011-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多