如何使用 Backbone.Collection 作为 Backgrid.SelectCell 的选项值



我有一个带有模型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
    })
  }
  ]

格式化程序是在编辑后将选择元素的字符串值转换回整数。

这是一个正确的解决方案吗?

相关内容

  • 没有找到相关文章

最新更新