Javascript 使用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

我试图从一个控制器复制一些带有视图模板的基本数据绑定。我正在使用straight JS和jQuery构建它。当用户输入一个字段时,我想更改控制器函数中的一个变量。事件正确触发,但变量保持不变。确定变量范围的最佳方法是什么

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感谢您的范围界定技术。我仍然觉得我还有一段路要走,然后才能用这段代码到达我想要的地方。感觉应该有另一种方式。应用程序的结构和我想要使用控制器的方式不允许这种实现。