在我的视图模型中有一个文件列表、文件类型和未使用的文件类型:
viewModel =
files: ko.observableArray([
new File({name: "A1", id: 1})
new File({name: "B1", id: 2})
new File({name: "C1", id: 3})
new File({name: "D1", id: 4})
])
types: ko.observableArray(dataTypes)
typesUnused: ko.observableArray(dataTypes)
我创建了一个File
类,并在其中创建了一个type
属性。要填写未使用的文件类型列表,请订阅 beforeChange 和其他 afterChangetype
属性
class File
constructor: (data) ->
@name = data.name
@id = data.id
@type = ko.observable(null)
# Updates array of types not used
@type.subscribe ((oldValue) ->
console.log "OLD: #{oldValue}"
viewModel.typesUnused.remove (item) -> item is oldValue if oldValue
), @, "beforeChange"
@type.subscribe (newValue) ->
console.log "NEW: #{newValue}"
if newValue && viewModel.typesUnused.indexOf(newValue) < 0
viewModel.typesUnused.push newValue
想法
想法是每当您更改文件类型时,都会在更改发生之前触发一个事件,并将旧类型添加到未使用的文件类型列表中。更改后将发生另一个事件,该事件将从未使用的类型列表中删除新类型。
问题
- 所有文件都带有定义的文件类型数组中的第一种类型。在这种情况下,“jpeg”
- 通过更改文件类型,所有其他人都会遭受更改!
- 当您从列表中删除文件类型时
typesUnused
,types
列表也可能会更改!
见:http: //jsfiddle.net/4nyVE/2/