我有一个有自己的视图模型的类,我在主视图中创建了这个类的2个实例。在主视图中,我想传递我的2个类实例的值,但我似乎无法使其工作......我想我只是不理解一些非常简单的概念。
预期结果是 value1 + value2 字段具有value1和value2的串联,第一个myValue显示value1,第二个myValue显示value2。这是我的代码和example:
using (SqlConnection con = new SqlConnection("Data Source=NIFAL;Initial Catalog=LaundrySystem;Integrated Security=True;"))
{
string sql = "select entryDate from LaundrySystemTable where laundID=@id";
var cmd = new SqlCommand( sql, con );
cmd.Parameters.AddWithValue( "@id", textBox1.Text.Trim() ); // if its type is not string, then do the conversion here
con.Open();
SqlDataReader reader = cmd.ExecuteReader();
if (reader.Read())
{
dateTimePicker1.Value = (DateTime?)reader["entryDate"];
}
con.Close();
}
答案 0 :(得分:6)
您的第一个displayField永远不会“看到”doSomething公式,因为该公式不是其父级的一部分,因此您需要将公式从MyViewModel
移动到Ext.container.Container
viewModel。
此外,当您发布自定义值时,它将具有reference.publishedvalue
格式。这应该会修复您的面板:
Ext.application({
name: 'Fiddle',
launch: function() {
Ext.define('MyViewModel', {
extend: 'Ext.app.ViewModel',
alias: 'viewmodel.myView'
});
Ext.define('MyView', {
extend: 'Ext.panel.Panel',
xtype: 'myView',
viewModel: {
type: 'myView'
},
config : {
myValue : null
},
publishes : ['myValue'],
items: [{
xtype: 'displayfield',
fieldLabel: 'myValue',
initComponent : function() {
var me = this,
owner = me.$initParent || me.initOwnerCt;
this.setBind({
value: '{' + owner.reference + '.myValue}'
});
this.callParent();
}
}]
});
Ext.create('Ext.container.Container', {
renderTo: Ext.getBody(),
viewModel: {
data: {
value1: 'Something',
value2: 'something else'
},
formulas: {
doSomething: function(getter) {
console.log(getter('value1'), getter('value2'));
return getter('value1') + getter('value2');
}
}
},
items: [{
xtype: 'displayfield',
fieldLabel: 'display',
bind: {
value: '{doSomething}'
}
},{
xtype: 'myView',
reference: 'view1',
title: 'View1',
bind: {
myValue: '{value1}'
}
},{
xtype: 'myView',
reference: 'view2',
title: 'View2',
bind: {
myValue: '{value2}'
}
}]
})
}
});