Bootstrap selectpicker val不接受对象只是字符串

时间:2016-07-02 18:07:22

标签: javascript jquery arrays twitter-bootstrap

我想了解$('#modal1').openModal(); 中的一个行为。我正在尝试使用我的会话中的一个属性加载此元素:

selectpicker

当我执行此代码时,只有元素Template.checkNotification.onRendered(function () { var currentNotification = Session.get("currentNotification"); this.$('#symptoms1').selectpicker({ multipleSeparator: ' ', }); this.$('#symptoms2').selectpicker({ multipleSeparator: ' ', }); var symptoms = []; for (var symptom of currentNotification.symptom.symptoms) { symptoms.push('"' + symptom.name + ';;' + symptom.value + '"'); } var symptomsSelected = symptoms.join(", "); var test1 = ['Dor de Cabeça;;dor-de-cabeca','Náusea;;nausea']; var test2 = "["+symptomsSelected+"]"; this.$('#symptoms1').selectpicker('val', test1); this.$('#symptoms2').selectpicker('val', test2); }); 正常工作并将正确的选项加载到#symptom1

如何构建一个提供给selectpicker的选项数组?

2 个答案:

答案 0 :(得分:1)

如果要将症状传递给subscribers GET /subscribers(.:format) subscribers#index POST /subscribers(.:format) subscribers#create new_subscriber GET /subscribers/new(.:format) subscribers#new edit_subscriber GET /subscribers/:id/edit(.:format) subscribers#edit subscriber GET /subscribers/:id(.:format) subscribers#show PATCH /subscribers/:id(.:format) subscribers#update PUT /subscribers/:id(.:format) subscribers#update DELETE /subscribers/:id(.:format) subscribers#destroy comments POST /comments(.:format) comments#create new_comment GET /comments/new(.:format) comments#new subscribers_search GET /subscribers/search(.:format) subscribers#search subscribers_visit GET /subscribers/visit(.:format) subscribers#visit ,则需要将其作为本机数组提供。此代码以原始方式和新方式构建数组(适合分配给selectpicker):

val
var currentNotification = {
  symptom: {
    symptoms: [
      { name: "symptom1", value: "value1" },
      { name: "symptom2", value: "value2" },
      { name: "symptom3", value: "value3" },
      { name: "symptom4", value: "value4" },
      { name: "symptom5", value: "value5" }
    ]
  }
};

var symptoms = [];
for (var symptom of currentNotification.symptom.symptoms) {
  symptoms.push('"' + symptom.name + ';;' + symptom.value + '"');
}

var symptomsSelected = symptoms.join(", ");
var test1 = "["+symptomsSelected+"]";

var test2 = $.map(currentNotification.symptom.symptoms, function(symptom) {
  return symptom.name + ';;' + symptom.value;
});

console.log("test1: ", typeof test1, " value: ", test1);
console.log("test2: ", typeof test2, " value: ", test2);

这是如何工作的? jQuery $.map函数将处理<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>数组中的每个症状,并将它们单独格式化以用于currentNotification.symptom.symptoms。每个元素都被格式化,但是数组保留为本机Javascript数组,每个元素对应于原始selectpicker数组。

比较currentNotification.symptom.symptomstest1的结果,看看差异:

test2

请注意,在此示例代码中,test1: string value: ["symptom1;;value1", "symptom2;;value2", "symptom3;;value3", "symptom4;;value4", "symptom5;;value5"] test2: object value: [ "symptom1;;value1", "symptom2;;value2", "symptom3;;value3", "symptom4;;value4", "symptom5;;value5" ] 是一个字符串,其格式类似于数组。这类似于JSON数组值,而不是本机Javascript数组值。 test1是一个适合与test2一起使用的Javascript数组。

使用selectpicker解决方案将解决您当前的问题并生成正确的Javascript数组。现在,您可以使用它来设置$.map

val
selectpicker

答案 1 :(得分:-1)

plunker:http://plnkr.co/edit/sjwK1e?p=preview

$scope.symptomsSelected="["+'"\My selected item is string\"'+"]"
$scope.test2 =angular.fromJson($scope.symptomsSelected);
$scope.test2=$scope.test2[0];
  {{test2}}
  <br>
  {{symptomsSelected}}