我有一个带有模型SprachLand的Backbone.Collection SprachLandList。
斯普拉克兰
'use strict'
module.exports = class SprachLand extends Backbone.Model
斯普拉克土地列表
"use strict"
SprachLand = require('../models/SprachLand')
module.exports = class SprachLandList extends Backbone.Collection
model: SprachLand
我想显示另一个带有 Backgrid 的集合,这个集合有一个模型,该模型具有一个属性,其中包含引用 SprachLand 模型的 id 数组。现在我想将 SprachlandList 集合用于 Backgrid 中 Select2Cell 单元格的值。天真地我试过
columns = [
{ name: "id", label: "ID", editable: false, cell: "integer" },
{ name: "bez", label: "Bezeichnung", editable: false, cell: "string" },
{ name: "rub.bez", label: "Rubrik", editable: false, cell: "string" },
{ name: "sl", label: "Sprachlandkombinationen", editable: true, cell:
Backgrid.SelectCell.extend({
#sllist is an instance of the SprachLandList
optionValues: sllist
multiple: true
})
}
]
我希望选择小部件显示"bez"属性"并将"id"属性作为值。
这是 sllist 的 JSON 表示形式
"[{"id":1,"bez":"de-DE"},{"id":2,"bez":"fr-FR"},
{"id":3,"bez":"en-GB"},{"id":4,"bez":"nl-NL"},
{"id":5,"bez":"it-IT"},{"id":6,"bez":"de-CH"},
{"id":7,"bez":"fr-CH"},{"id":8,"bez":"it-CH"},
{"id":9,"bez":"de-AT"}]"
我收到一个错误:
Uncaught TypeError: 'optionValues' must be of type {Array.<Array>|Array.<{name: string, values: Array.<Array>}>}
如何获得 optionValue 的 SprachLandList 集合的可接受表示形式?
经过一番搜索,我发现 将对象数组转换为数组
数组经过一番干预,我现在有一个可能的解决方案:
columns = [
{ name: "id", label: "ID", editable: false, cell: "integer" },
{ name: "bez", label: "Bezeichnung", editable: false, cell: "string" },
{ name: "sl", label: "Sprachlandkombinationen", editable: true, cell: Backgrid.SelectCell.extend({
optionValues: sllist.map((obj) ->
nobj = obj.attributes
Object.keys(nobj).sort().map (key) ->
nobj[key]
)
formatter:
fromRaw: (rawValue, model) ->
(if _.isArray(rawValue) then rawValue else (if rawValue? then [rawValue] else []))
toRaw: (formattedValue, model) ->
(if not formattedValue? then [] else _.map(formattedValue, (v) ->
parseInt v
))
multiple: true
})
}
]
格式化程序是在编辑后将选择元素的字符串值转换回整数。
这是一个正确的解决方案吗?