Я использую jsViews для создания приложения.
В каком-то месте у меня есть массив сложных объектов. Массив связан в раскрывающемся списке, где я могу установить метку и значение для свойств моего объекта.
Однако мне нужно получить и некоторые другие свойства моего пользовательского объекта.
Как я могу это сделать?
Прямо сейчас у меня есть:
(function($) {
var dataVm = {
value: null,
choices: [
{ "label" : "France", "value" : "FR", "icon" : "flag-icon-fr" },
{ "label" : "Germany", "value" : "DE", "icon" : "flag-icon-de" },
{ "label" : "Brazil", "value" : "BR", "icon" : "flag-icon-br" },
{ "label" : "USA", "value" : "US", "icon" : "flag-icon-us" }
],
icon: "flag-icon-fr"
};
var helpers = {
doSelect : function(){
// Fake business rule, I.E. call a web service to get country data
var valueFromBusinessLogic = "FR";
$.observable(dataVm).setProperty("value", valueFromBusinessLogic);
}
};
$.templates("#mainTemplate").link("#container", dataVm, helpers);
})(jQuery);
<link href="https://cdnjs.cloudflare.com/ajax/libs/flag-icon-css/3.1.0/css/flag-icon.min.css" rel="stylesheet"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jsviews/0.9.90/jsviews.min.js"></script>
<script id="mainTemplate" type="text/x-jsrender">
<p>Selected : <span>{^{:value}}</span></p>
<p>Flag : <span data-link="class{:('flag-icon ' + icon)}"></span></p>
<select data-link='value'>
{^{for choices}}
<option value="{{:value}}">{{:label}}</option>
{{/for}}
</select>
<button data-link="{on ~doSelect}">Select from business logic</button>
</script>
<div id="container">
</div>
Это работает, как и ожидалось, но я не могу получить подсвойство icon
.
Мое свойство value
важно и может быть установлено внешними действиями (инициализация формы или нажатие кнопки). Так что я не могу (по крайней мере, я так думаю), я не могу играть с #index
, потому что это поместит индекс в свойство value.