2

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

我希望 Select 小部件显示“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>}>}

如何为 optionValues 获得 SprachLandList 集合的可接受表示?

4

1 回答 1

0

经过一番搜索,我发现将对象数组转换为数组数组

经过一番干预,我现在有了一个可能的解决方案:

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
    })
  }
  ]

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

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

于 2014-12-11T23:09:22.683 回答