问题
我有一个文本输入,我选择了它作为标签,可以很好地查询远程数据,我可以使用它搜索甚至创建新项目,并且一切正常。
使用selectize:
var $select = $('.authorsearch').selectize({
valueField: 'AuthorId',
labelField: 'AuthorName',
searchField: ['AuthorName'],
maxOptions: 10,
create: function (input, callback) {
$.ajax({
url: '/Author/AjaxCreate',
data: { 'AuthorName': input },
type: 'POST',
dataType: 'json',
success: function (response) {
return callback(response);
}
});
},
render: {
option: function (item, escape) {
return '<div>' + escape(item.AuthorName) + '</div>';
}
},
load: function (query, callback) {
if (!query.length) return callback();
$.ajax({
url: '/Author/SearchAuthorsByName/' + query,
type: 'POST',
dataType: 'json',
data: {
maxresults: 10
},
error: function () {
callback();
},
success: function (res) {
callback(res);
}
});
}
});
文本框:
<input class="authorsearch" id="Authors" name="Authors" type="text" value="" />
例子:
然后,当我选择一个(在本例中为“ apple”)时,它会如您所愿的那样出现在徽章中,并且文本框的基础值是这些项的值的逗号分隔列表。
电流输出
问题是,当我加载页面并希望将从数据库中检索到的值作为标记显示在选定的文本输入中时,它只会加载这些值,而我看不到显示displayname的方法。
<input class="authorsearch" id="Authors" name="Authors" type="text" value="1,3,4" />
希望的食物
我已经尝试了输入值字段的各种值,以使其加载项目以显示其显示名称而不是其值。下面是一个将单个对象作为JSON返回的示例,理想的情况是能够将这些对象的JSON数组作为选定的标签加载。
[{"AuthorId":1,"AuthorName":"Test Author"},
{"AuthorId":3,"AuthorName":"Apple"},
{"AuthorId":4,"AuthorName":"Test Author 2"}]
我该怎么办?我需要以特定方式形成文本框的值,还是需要使用一些JavaScript加载现有值?
我最终使用onInitialize
回调加载了存储在data-*
字段中的JSON值。您可以在此jsfiddle中看到它的实际作用。
<input class="authorsearch" id="Authors" name="Authors" type="text" value=""
data-selectize-value='[{"AuthorId":1,"AuthorName":"Test"},{"AuthorId":2,"AuthorName":"Test2"}]'/>
基本上,它解析data-selectize-value
值,然后将选项添加到selectize中,然后添加项本身。
onInitialize: function() {
var existingOptions = JSON.parse(this.$input.attr('data-selectize-value'));
var self = this;
if(Object.prototype.toString.call( existingOptions ) === "[object Array]") {
existingOptions.forEach( function (existingOption) {
self.addOption(existingOption);
self.addItem(existingOption[self.settings.valueField]);
});
}
else if (typeof existingOptions === 'object') {
self.addOption(existingOptions);
self.addItem(existingOptions[self.settings.valueField]);
}
}
我的解决方案确实假定我的JSON对象正确形成,并且它是单个对象还是对象Array,因此它可能适合也可能不适合其他人的需要。
因此它解析:
[{"AuthorId":1,"AuthorName":"Test"},
{"AuthorId":2,"AuthorName":"Test2"}]
到:
当然基于上面我原始帖子中的选择设置。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句