首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >挖空: foreach,selectedvalue

挖空: foreach,selectedvalue
EN

Stack Overflow用户
提问于 2015-09-01 07:29:14
回答 2查看 71关注 0票数 1
代码语言:javascript
复制
{
        "id": "0001",
        "type": "donut",
        "name": "Cake",
        "ppu": 0.55,
        "selectedToppingId": "",
        "topping":
            [
                { "id": "5001", "type": "None" },
                { "id": "5002", "type": "Glazed" },
                { "id": "5005", "type": "Sugar" },
                { "id": "5007", "type": "Powdered Sugar" },
                { "id": "5006", "type": "Chocolate with Sprinkles" },
                { "id": "5003", "type": "Chocolate" },
                { "id": "5004", "type": "Maple" }
            ]
}

我想要显示单选按钮与顶部的选择。代码可能如下所示:

代码语言:javascript
复制
    <div data-bind="foreach: topping">
      <input type="radio" name="apps" data-bind="attr: { value: $data}, 
        checked: $parent.selectedTopping"/>
      <span data-bind="text: $data"/>
      <br/>
    </div>

如何组织我的viewModel来绑定radioButtons和selectedTopping (selectedToppingId必须选择toppingId )?

(数据= MyJSON)

谢谢!

EN

回答 2

Stack Overflow用户

发布于 2015-09-01 08:09:38

您给出的代码片段有一个错误,那就是<span data-bind="text: $data"/>必须是<span data-bind="text: $data"></span>才能与knockout一起工作。我不完全清楚你所做的是什么,但下面是你所提供的一个工作示例。我认为你可以走几条路。您可以自己将传入的数据映射到您自己的客户端视图模型,也可以使用knockout.mapping之类的工具将传入的json数据转换为淘汰的视图模型。

代码语言:javascript
复制
var data = {
  "id": "0001",
  "type": "donut",
  "name": "Cake",
  "ppu": 0.55,
  "selectedToppingId": "",
  "topping":
        [
            { "id": "5001", "type": "None" },
            { "id": "5002", "type": "Glazed" },
            { "id": "5005", "type": "Sugar" },
            { "id": "5007", "type": "Powdered Sugar" },
            { "id": "5006", "type": "Chocolate with Sprinkles" },
            { "id": "5003", "type": "Chocolate" },
            { "id": "5004", "type": "Maple" }
        ]
};

var vm = function() {
  var self = this;
  self.toppings = ko.observableArray(data.topping);
  self.selectedTopping = ko.observable("5007");

  return self;
};

ko.applyBindings(new vm());
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
<div data-bind="foreach: toppings">
  <input type="radio" name="apps" data-bind="attr: { value: $data.id}, 
        checked: $parent.selectedTopping" />
  <span data-bind="text: $data.type"></span>
  <br/>
</div>

<p>Selected Topping Id is
  <div data-bind="text: selectedTopping"></div>
</p>

票数 0
EN

Stack Overflow用户

发布于 2015-09-01 08:35:55

代码将根据列表显示单选按钮,并将选定的ID保存回selectedToppingId变量:

代码语言:javascript
复制
   var data =
{
        "id": "0001",
        "type": "donut",
        "name": "Cake",
        "ppu": 0.55,
        "selectedToppingId": "",
        "topping":
            [
                { "id": "5001", "type": "None" },
                { "id": "5002", "type": "Glazed" },
                { "id": "5005", "type": "Sugar" },
                { "id": "5007", "type": "Powdered Sugar" },
                { "id": "5006", "type": "Chocolate with Sprinkles" },
                { "id": "5003", "type": "Chocolate" },
                { "id": "5004", "type": "Maple" }
            ]
}

var ViewModel = function() {
  var self = this;
  self.toppings = ko.observableArray(data.topping);
  self.selectedTopping = ko.observable("5007");

  self.selectedTopping.subscribe(function(newValue) {
	//Find selected item from parent array	
	var result = $.grep(data.topping, function(e){ return e.id == newValue; })[0];
	
	//Assign the ID back to our data
	selectedToppingId = result.id;
  });

  return self;
};


ko.applyBindings(new ViewModel());
代码语言:javascript
复制
<script src="http://knockoutjs.com/downloads/knockout-latest.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<div data-bind="foreach: toppings">
  <input type="radio" name="apps" data-bind="attr: {value: $data.id}, 
        checked: $parent.selectedTopping" />
  <span data-bind="text: $data.type"></span>
  <br/>
</div>

<p>Selected Id:
  <div data-bind="text: selectedTopping"></div>
</p>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32321409

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档