2008年9月24日星期三

RICO notes

1, 设置Rico.TabbedPanel某个tab为选中状态。 tabs.openByIndex(); tabs.selectionSet.select($$('div.panelHeader'[2]));


2, 删除Rico.LiveGrid 中的一行。
<script type='text/javascript'>
var gridA;
Rico.loadModule('LiveGrid','LiveGridMenu','greenHdg.css');
Rico.onLoad( function() {
var buffer = new Rico.Buffer.Base($('licenseePayloadDG').tBodies[0]);
var grid_options = {
columnSpecs: [ {width:280},
{width:280},
{width:180},
{width:200}
]
};
gridA = new Rico.LiveGrid('licenseePayloadDG', buffer, grid_options);
});


function deleteCurrentRow(obj){
var cell = obj.parentNode;
gridA.selectCell(cell);
var row = gridA.SelectIdxStart.row; // SelectIdxStart.row 表示了当前选中的行的index。
var col = gridA.SelectIdxStart.column; // SelectIdxStart.column 表示了当前选中的列的index。
var cols = gridA.headerColCnt; // headerColCnt 表示了列的总数,是个常量。

gridA.selectRow(row); // selectRow(row) 高亮某行。row是行的索引。

// buffer 是Rico LiveGrid的数据模型对象。baseRows是数组格式的数据。baseRows.splice(row, count) 就把数据从数据模型中删除了。
gridA.buffer.baseRows.splice(row, 1);

// 删除数据后需要刷新页面才能看出效果。
gridA.refreshContents(0);
}


function removeCellzRow(row) {
for( var c=0; c < gridA.headerColCnt; c++ ) {
// LiveGrid的表格形式并不是由HTML table 表示的由<div> + css表现的。columns[]表示了所有的列。columns[c].cell(row)定位到了一个cell.
var cell=gridA.columns[c].cell(row);

// 选择一个单元格。
gridA.selectCell(cell);

// 清空一个单元格的内容。注意: 设置innerHTML=""只是把表现层的东西清空了。后台的数据模型gridA.buffer.baseRows并没有改变。
cell.innerHTML = "";
}
}
</script>

对应的HTML: <a href="#" onclick='javascript: {if(confirm("deleteRow?")) {deleteCurrentRow(this); }else {}}'>DelRow</a>




2008年9月7日星期日

运行时

以前的datamodel过于复杂,而且对于未来的计划是早晚要替换掉旧代码,那么如何隔离旧的接口给新的API呢?
我的方法是:定义一个新接口、新的一些class,用旧的class实现这个新接口。外面的模块使用旧的Class的地方,都用新接口引用。
Willie则直接了当的用了extends。
Willie把FConnector继承Thread的关系掐掉了。Connector确实没必要以thread的方式运行。因为其下的session是个thread。牛人终归是牛人,下手就是地方。
总的说来,脑袋里有个动态的系统运行某型至关重要,静态的类图是不够全面的,从某种意义上来说动态模型才是一个真正的程序模型。
最为一个senior的programmer 每个UseCase的call sequences,一定要能在脑袋里流出来,这都搞不定,别提可靠性。
对于高手,代码就是设计。这句话的含义就是对于高手来说,它的大脑就是一个JVM,他知道一个程序从某点执行下去到某点,这个JVM里有几个class,每个class有几个instance, 有多少个线程。
没这水平,就先用UML画点图,自己琢磨琢磨吧。
Spring这个东西得到了公认。除了其中的IoC、AOP这些概念外,其配置文件的功能--装配,不就是强制让你考虑了系统启动时的个对象、实例的各种关系(静态/动态)么?