forked from fanruan/fineui
guy
8 years ago
19 changed files with 691 additions and 525 deletions
@ -1,26 +0,0 @@
|
||||
Demo.Func = BI.inherit(BI.Widget, { |
||||
props: { |
||||
baseCls: "demo-func" |
||||
}, |
||||
render: function () { |
||||
return { |
||||
type: "bi.button_map", |
||||
chooseType: BI.ButtonGroup.CHOOSE_TYPE_MULTI, |
||||
layouts: [{ |
||||
type: "bi.vertical" |
||||
}, { |
||||
type: "bi.center_adapt", |
||||
}], |
||||
items: [{ |
||||
type: "bi.label", |
||||
text: "0", |
||||
value: 0 |
||||
}, { |
||||
type: "bi.button", |
||||
text: "1", |
||||
value: 1 |
||||
}] |
||||
} |
||||
} |
||||
}); |
||||
$.shortcut("demo.button_map", Demo.Func); |
@ -0,0 +1,74 @@
|
||||
Demo.Func = BI.inherit(BI.Widget, { |
||||
props: { |
||||
baseCls: "demo-func" |
||||
}, |
||||
|
||||
_createItems: function () { |
||||
var items = BI.makeArray(100, { |
||||
type: "demo.virtual_group_item" |
||||
}); |
||||
items[0].value = BI.UUID(); |
||||
return items; |
||||
}, |
||||
|
||||
render: function () { |
||||
var self = this; |
||||
return { |
||||
type: "bi.vertical", |
||||
vgap: 20, |
||||
items: [{ |
||||
type: "bi.virtual_group", |
||||
width: 200, |
||||
height: 300, |
||||
ref: function () { |
||||
self.buttonMap = this; |
||||
}, |
||||
chooseType: BI.ButtonGroup.CHOOSE_TYPE_MULTI, |
||||
layouts: [{ |
||||
type: "bi.vertical" |
||||
}, { |
||||
type: "bi.center_adapt", |
||||
}], |
||||
items: this._createItems() |
||||
}, { |
||||
type: "bi.button", |
||||
text: "点击刷新", |
||||
handler: function () { |
||||
self.buttonMap.populate(self._createItems()); |
||||
} |
||||
}] |
||||
|
||||
} |
||||
} |
||||
}); |
||||
$.shortcut("demo.virtual_group", Demo.Func); |
||||
|
||||
Demo.Item = BI.inherit(BI.Widget, { |
||||
props: { |
||||
baseCls: "demo-item", |
||||
height: 30 |
||||
}, |
||||
|
||||
render: function () { |
||||
var self = this; |
||||
return { |
||||
type: "bi.label", |
||||
ref: function () { |
||||
self.label = this; |
||||
}, |
||||
height: this.options.height, |
||||
text: "这是一个测试项" + BI.UUID() |
||||
} |
||||
}, |
||||
|
||||
update: function (item) { |
||||
this.label.setText(item.value); |
||||
console.log("更新了一项"); |
||||
return true; |
||||
}, |
||||
|
||||
created: function () { |
||||
console.log("创建了一项"); |
||||
} |
||||
}); |
||||
$.shortcut("demo.virtual_group_item", Demo.Item); |
@ -0,0 +1,69 @@
|
||||
BI.VirtualGroup = BI.inherit(BI.Widget, { |
||||
_defaultConfig: function () { |
||||
return BI.extend(BI.VirtualGroup.superclass._defaultConfig.apply(this, arguments), { |
||||
baseCls: "bi-virtual-group", |
||||
items: [], |
||||
layouts: [{ |
||||
type: "bi.center", |
||||
hgap: 0, |
||||
vgap: 0 |
||||
}] |
||||
}) |
||||
}, |
||||
|
||||
render: function () { |
||||
this.populate(this.options.items); |
||||
}, |
||||
|
||||
_createBtns: function (items) { |
||||
var o = this.options; |
||||
return BI.createItems(items, { |
||||
type: "bi.text_button" |
||||
}); |
||||
}, |
||||
|
||||
_packageBtns: function (btns) { |
||||
var o = this.options; |
||||
|
||||
for (var i = o.layouts.length - 1; i > 0; i--) { |
||||
btns = BI.map(btns, function (k, it) { |
||||
return BI.extend({}, o.layouts[i], { |
||||
items: [ |
||||
BI.extend({}, o.layouts[i].el, it) |
||||
] |
||||
}) |
||||
}) |
||||
} |
||||
return btns; |
||||
}, |
||||
|
||||
_packageItems: function (items, packBtns) { |
||||
return BI.createItems(BI.makeArrayByArray(items, {}), BI.clone(packBtns)); |
||||
}, |
||||
|
||||
_packageLayout: function (items) { |
||||
var o = this.options, layout = BI.deepClone(o.layouts[0]); |
||||
|
||||
var lay = BI.formatEL(layout).el; |
||||
while (lay && lay.items && !BI.isEmpty(lay.items)) { |
||||
lay = BI.formatEL(lay.items[0]).el; |
||||
} |
||||
lay.items = items; |
||||
return layout; |
||||
}, |
||||
|
||||
populate: function (items) { |
||||
var self = this; |
||||
items = items || []; |
||||
this.options.items = items; |
||||
items = this._packageItems(items, this._packageBtns(this._createBtns(items))); |
||||
if (!this.layouts) { |
||||
this.layouts = BI.createWidget(BI.extend({element: this}, this._packageLayout(items))); |
||||
} else { |
||||
this.layouts.populate(this._packageLayout(items).items); |
||||
} |
||||
} |
||||
}); |
||||
BI.VirtualGroup.EVENT_CHANGE = "EVENT_CHANGE"; |
||||
|
||||
$.shortcut("bi.virtual_group", BI.VirtualGroup); |
@ -1,115 +0,0 @@
|
||||
/** |
||||
* value作为key值缓存button, 不支持顺序读写 |
||||
* 适合用于频繁增删的一组button |
||||
* Created by GUY on 2015/8/10. |
||||
* @class BI.ButtonMap |
||||
* @extends BI.ButtonTree |
||||
*/ |
||||
|
||||
BI.ButtonMap = BI.inherit(BI.ButtonTree, { |
||||
_defaultConfig: function () { |
||||
return BI.extend(BI.ButtonMap.superclass._defaultConfig.apply(this, arguments), { |
||||
baseCls: "bi-button-map" |
||||
}) |
||||
}, |
||||
|
||||
_init: function () { |
||||
BI.ButtonMap.superclass._init.apply(this, arguments); |
||||
}, |
||||
|
||||
_createBtns: function (items) { |
||||
var self = this, o = this.options; |
||||
var buttons = BI.createWidgets(BI.createItems(items, {type: "bi.text_button", once: o.chooseType === 0})); |
||||
var keys = BI.map(items, function (i, item) { |
||||
item = BI.stripEL(item); |
||||
if (!(BI.isKey(item.id) || BI.isKey(item.value))) { |
||||
throw new Error("item必须包含id或value属性"); |
||||
} |
||||
return item.id || item.value; |
||||
}); |
||||
return BI.object(keys, buttons); |
||||
}, |
||||
|
||||
setValue: function (v) { |
||||
var self = this; |
||||
v = BI.isArray(v) ? v : [v]; |
||||
BI.each(this.buttons, function (val, item) { |
||||
if (!BI.isFunction(item.setSelected)) { |
||||
item.setValue(v); |
||||
return; |
||||
} |
||||
if (v.contains(val)) { |
||||
item.setSelected && item.setSelected(true); |
||||
} else { |
||||
item.setSelected && item.setSelected(false); |
||||
} |
||||
}); |
||||
}, |
||||
|
||||
setNotSelectedValue: function (v) { |
||||
var self = this; |
||||
v = BI.isArray(v) ? v : [v]; |
||||
BI.each(this.buttons, function (val, item) { |
||||
if (!BI.isFunction(item.setSelected)) { |
||||
item.setNotSelectedValue(v); |
||||
return; |
||||
} |
||||
if (v.contains(val)) { |
||||
item.setSelected && item.setSelected(false); |
||||
} else { |
||||
item.setSelected && item.setSelected(true); |
||||
} |
||||
}); |
||||
}, |
||||
|
||||
populate: function (items) { |
||||
var self = this; |
||||
var args = [].slice.call(arguments); |
||||
var linkHashMap = new BI.LinkHashMap(); |
||||
var val = function (item) { |
||||
return item.id || item.value; |
||||
}; |
||||
if (!this.buttons) { |
||||
this.buttons = {}; |
||||
} |
||||
//所有已存在的和新添加的
|
||||
var willCreated = []; |
||||
BI.each(items, function (i, item) { |
||||
item = BI.stripEL(item); |
||||
if (self.buttons[val(item)]) { |
||||
var ob = self.buttons[val(item)]; |
||||
args[0] = item.items; |
||||
args[2] = item; |
||||
ob.populate && ob.populate.apply(ob, args); |
||||
} else { |
||||
willCreated.push(item); |
||||
} |
||||
}); |
||||
//创建新元素
|
||||
args[0] = willCreated; |
||||
var newBtns = this._btnsCreator.apply(this, args); |
||||
|
||||
//整理
|
||||
var array = []; |
||||
BI.each(items, function (i, item) { |
||||
item = BI.stripEL(item); |
||||
var button = self.buttons[val(item)] || newBtns[val(item)]; |
||||
linkHashMap.add(val(item), button); |
||||
array.push(button); |
||||
}); |
||||
this.buttons = linkHashMap.map; |
||||
|
||||
BI.DOM.hang(this.buttons); |
||||
this.empty(); |
||||
|
||||
var packages = this._packageItems(items, this._packageBtns(array)); |
||||
BI.createWidget(BI.extend({element: this}, this._packageLayout(packages))); |
||||
}, |
||||
|
||||
getIndexByValue: function (value) { |
||||
throw new Error("不能使用getIndexByValue方法"); |
||||
} |
||||
}); |
||||
BI.ButtonMap.EVENT_CHANGE = "EVENT_CHANGE"; |
||||
|
||||
$.shortcut("bi.button_map", BI.ButtonMap); |
Loading…
Reference in new issue