2013-10-14 3 views
0

나는이 기술로 나의 기술 부족을 과시했다. 그러나 미안 때문에 내 모든 뷰 모델에 ... 자존심 놓아 미안 기꺼이자바 스크립트에서 전역 변수로서의 녹아웃 배열

학습을위한 I 정의 :

self.Tags() = ko.observableArray(); 
self.Skills() = ko.observableArray(); 

다음 내 태그를 저장합니다. 뷰 모델 내에서

function saveTags(category, mytagsArray) { ... } 

내가 전화 '(기술, "기술") saveTags'과 없음) (나에게 self.Tags 말하는이 오류를 얻을 : 나는 어떤 처리를 할 어디 뷰 모델 외부에서이 기능을 만들었습니다 함수.

"saveTags"함수에서 self.Tags를 참조 할 수없는 이유는 무엇입니까?

은 (그리고 ... 대신 기술의 LackOfSkills해야 말을하지 마십시오;)으로()의없이

+0

내 데모 또는 내가 붙여 넣은 샘플 코드를 확인하십시오. 뷰 모델을 정의하는 객체 리터럴 방식을 사용합니다. –

답변

1

Here is a demo pen for you : 경우에

self.Tags = ko.observableArray(); 
self.Skills = ko.observableArray(); 

당신이 나중에 전화 기능 링크를 지정하려면 : 그 호출의 경우
당신이 결과를 할당 할 : 나는 올바른 코드는 모양을 추측 . 이 같은 뷰 모델을 정의하십시오 :

var tagsViewModel = { 
    // data 
    tagToAdd: ko.observable(""), // this is the new tag to add 
    tags: ko.observableArray([]), //empty collection 
    skills: ko.observableArray([]), 

// behaviors 
    addTag: function() { 
     var newTag = { Name: this.tagToAdd() }; 
     this.tagToAdd(""); 

     tagsViewModel.tags.push(newTag) 

    } 
}; 

ko.applyBindings(tagsViewModel); 

이처럼 HTML을 정의합니다

<input type="text" placeholder="Add New Tag" data-bind="value: tagToAdd, valueUpdate: 'afterkeydown'" /> <button data-bind="click: addTag, enable: tagToAdd().length > 0" class="btn"><i class="icon-plus"></i> Add</button> 

<ul data-bind="foreach: tags" class=""> 
<!-- DEFINE UR LI HERE --> 
</ul> 
+1

@AsleG 내 데모 또는 내가 붙여 넣은 샘플 코드를 확인하십시오. 뷰 모델을 정의하는 객체 리터럴 방식을 사용합니다. –

+1

@AsleG addtag ​​함수에서 볼 수 있듯이 SaveTags 함수에서 사용할 수있는 것과 같은 방식으로 태그, tagtoadd 속성을 사용하고 있습니다. 이름 만 다르지만 배열에 항목을 추가하는 것과 같은 일을합니다. –

+0

@AsleG 필자의 샘플 데모 또는 위의 코드가 문제를 해결하거나 올바른 방법으로 VM을 작성하는 방법을 알려 주면 친절하게도 내 대답을 대답으로 받아들입니다. P –

2

시도 :

self.Tags = ko.observableArray(); 
self.Skills = ko.observableArray(); 

self.Tags = foo가에 self.Tags을 설정 말한다 너. self.Tags()는 self.Tags가 함수에서 호출하고 호출하려고한다고합니다. 둘 다 합법적 인 진술입니다. 그러나 self.Tags() = foo은 self.Tags가 당신이 호출하고 그것의 값을 foo로 설정하고자하는 함수라고 말합니다 ... 어떤 언어에서는 유효하지 않은 코드이고 말이 맞지 않습니다.

1

당신은 너무 같은 변수에 저장하여 뷰 모델에 액세스 할 수 있습니다

function ViewModel() { 
    self.Tags = ko.observableArray(); 
    self.Skills = ko.observableArray(); 
} 
my = { viewModel: new ViewModel() }; 
ko.applyBindings(my.viewModel); 

그런 다음 당신은 그냥 여기서 문제는 당신의 결과에 ko.observableArray();를 할당하는 것을 my.Tags()

related answer

+1

이 코드는 OP가 –

+1

에 올린 것과 동일한 이유로 유효하지 않습니다. 나는 체크인을하지 않고 코드를 붙여 넣기 만합니다. 고맙습니다. 이제 고쳐졌습니다. –

+0

@Circadian! 이것은 내 모델에 매우 가깝습니다. ViewModel() {} 메소드가 있습니다. self.saveAll = function() {...} 외부 함수로 "saveTags()"를 호출하고 싶습니다. ("self.SaveTags()"를 ViewModel 내부 메서드로 포함하면 작동하도록 할 수 있습니다. 그렇다면 my.Tasks() 등을 참조하여이를 수행 할 수 있습니까? –

1

에 액세스 전화 self.Tags(), 그리고 그 이유는 귀하의 기능은 self.Tags 변수에 저장되지 않습니다.

self.Tags = ko.observableArray; 
self.Skills = ko.observableArray; 
... 
// somewhere later 
self.Tags(); 
관련 문제