Javascript 使用jQuery构建基本数据绑定,但变量的作用域未正确确定
我试图从一个控制器复制一些带有视图模板的基本数据绑定。我正在使用straight JS和jQuery构建它。当用户输入一个字段时,我想更改控制器函数中的一个变量。事件正确触发,但变量保持不变。确定变量范围的最佳方法是什么Javascript 使用jQuery构建基本数据绑定,但变量的作用域未正确确定,javascript,jquery,data-binding,scope,Javascript,Jquery,Data Binding,Scope,我试图从一个控制器复制一些带有视图模板的基本数据绑定。我正在使用straight JS和jQuery构建它。当用户输入一个字段时,我想更改控制器函数中的一个变量。事件正确触发,但变量保持不变。确定变量范围的最佳方法是什么 function myController() { var password = '1234'; //handle data binding bindTo = function(elem, prop) { console.log('original
function myController() {
var password = '1234';
//handle data binding
bindTo = function(elem, prop) {
console.log('original stored prop = ' + prop); //this logs out 1234
//BUT only the first time
//on every subsequent keypress it logs out the value that the user types
//which has no effect on the var password in the controller
var elem = $(elem);
var value = elem.val();
// Save current value of element
elem.data('oldVal', value);
// Look for changes in the value
elem.bind("propertychange keyup input paste", function(event){
console.log('inside bind fn prop = ' + prop)
var val = elem.val();
// If value has changed...
if (elem.data('oldVal') != val) {
// Updated stored value
elem.data('oldVal', val);
prop = val; //where is prop being set?
console.log(prop); //this logs my value properly
}
});
};
//set bindings
bindTo($('input.loginPassword')[0], password);
}
试试这个
function myController(elem, prop) {
var password = '1234';
bindTo = function(elem, prop) {
console.log('original stored prop = ' + prop); //this logs out 1234
//BUT only the first time
//on every subsequent keypress it logs out the value that the user types
//which has no effect on the var password in the controller
var elem = $(elem);
var value = elem.val();
// Save current value of element
elem.data('oldVal', value);
// Look for changes in the value
elem.bind("propertychange keyup input paste", function(event){
console.log('inside bind fn prop = ' + prop)
var val = elem.val();
// If value has changed...
if (elem.data('oldVal') != val) {
// Updated stored value
elem.data('oldVal', val);
prop = val; //where is prop being set?
console.log(prop); //this logs my value properly
}
});
}(elem, prop);
谢谢,但我希望能够将许多变量绑定在一起。最后的(元素,道具)看起来会自动执行吗?这是范围界定的必要部分吗?我想我的主要问题是关于我传递给bindTo()的'prop'参数。我怎样才能让它真正与myController的范围相关。在某一点上似乎是这样,但后来就不是了。可能是因为我无意中在函数的本地范围中创建了一个“prop”变量,所以它永远不会返回到主myController函数中表示的prop的原始变量。最后一行中的(elem,prop)进行范围界定,这也包括在FrontController函数中@Scottwright感谢您的范围界定技术。我仍然觉得我还有一段路要走,然后才能用这段代码到达我想要的地方。感觉应该有另一种方式。应用程序的结构和我想要使用控制器的方式不允许这种实现。