Your code is wrong.
You are reading twice the same field in the record.
I have tested your case and it works just fine.
Code:
Ext.application({
name : 'Fiddle',
launch : function() {
Ext.define('Fiddle.Component', {
extend: 'Ext.Component',
alias: 'widget.fiddlecomponent',
bind: {
html: '{users_name}'
},
config: {
record: null
},
viewModel: {
data: {
record: null
},
formulas: {
users_name: function(get) {
console.log('users_name formula called');
var fname = get('record.fname'),
lname = get('record.lname'),
name = (fname && lname) ? (fname + ' ' + lname) : (fname || lname || '');
return (name);
}
}
},
updateRecord: function (newValue) {
this.getViewModel().set('record', newValue);
}
});
var panel = Ext.create('Ext.panel.Panel', {
items: [{
xtype: 'fiddlecomponent',
bind: {
record: '{recordA}'
}
}, {
xtype: 'fiddlecomponent',
bind: {
record: '{recordB}'
}
}],
renderTo: Ext.getBody(),
title: 'Panel Title',
viewModel: {
data: {
recordA: Ext.create('Ext.data.Model', {
lname: 'Blue',
fname: 'Hipy'
}),
recordB: Ext.create('Ext.data.Model', {
fname: 'Hipy'
})
}
}
});
}
});