2014-02-25 6 views
0

KnockoutJs에서 사용하는 JavaScript 객체 리터럴이 있으며 필요한 속성으로 가져올 수없는 함수 안에 있습니다. 이건 내 현재 자바 스크립트입니다함수 내부에서 속성에 액세스하는 방법?

var vm = function() { 
    var self = this; 

    function remove(item) { 
     self.myArray.remove(item) 
    }; 
} 

:

var vm = { 
    myArray: ko.observableArray([]), 

    remove: function (item) { 
     //debugger; Cant get to myArray 
     //this is the item of the array 
     myArray.remove(item); 
    } // .bind(this) doesn't work 
} 

및 HTML :

<!-- ko foreach: myArray--> 
<button type="button" data-bind="click: $parent.remove, uniqueName: true" >Remove</button> 
    ... 
<!-- /ko --> 
+0

'this'는 함수가 호출되는 방식에 따라 다릅니다. 'vm.remove()'와 같은 함수를 호출하면'remove' 안에서'this'가'vm'이됩니다. Knockout에 익숙하지 않지만 단순히 'this.myArray.remove (item)'를 사용하여 시도해 보셨습니까? – elclanrs

답변

0

이런 일에 문자를 변경하지 않고 거기에 도착하는 방법이 있나요 이 문제를 해결하는 2 가지 방법 (개인적으로 먼저 선호 함)

바인딩이

var vm = { 
    myArray: ko.observableArray(); 
} 
vm.remove = function(item) { 
    this.myArray.remove(item); 
}.bind(vm); 

<button data-bind="click: $parent.remove"> 

을 제거 또는 데이터 바인딩 식의 기능을 결합 선언하는 기능

var vm = { 
    myArray: ko.observableArray(), 
    remove = function(item) { 
     this.myArray.remove(item); 
    } 
} 

<button data-bind="click: $parent.remove.bind($parent)"> 
+0

doh. 롤. 고마워, 첫 번째와 함께 갔다. – William

+0

완전성을 위해 ... 이벤트 바인딩은 "this"범위를 현재 오브젝트 ($ data)로 설정합니다. foreach 바인딩에 있기 때문에 observableArray의 현재 항목이됩니다. –

0

객체 리터럴 구문을 사용하는 경우, 당신은 단지 객체를 저장 년대 변수를 사용할 수 있습니다 .

var vm = { 
    myArray: ko.observableArray([]), 

    remove: function (item) { 
     vm.myArray.remove(item); 
    } 
} 
관련 문제