2013-06-14 2 views
0

다음 모델에 데이터를 전달하고 싶지만 'with'문을 사용하여 모델을 바인딩하고 있기 때문에 'Name'이 정의되지 않았다는 오류와 페이지로드시 올바르게 실행되는 것 같습니다.녹아웃 : 바인딩으로 데이터를 전달하는 방법은 무엇입니까?

<div data-bind="with: aFunction()"> 
    <div data-bind="text: test"></div> 
    <input data-bind="value: test, valueUpdate: 'afterkeydown'"></input> 
</div> 


var viewModel = function(){ 
    var self = this; 
    var data = {Name : "Mark"}; 

    self.aFunction = function (data){ 
     var self = this; 
     self.test = ko.observable(data.Name); 
     return self; 
    } 

    self.aFunction(data); 

}; 
ko.applyBindings(new viewModel()); 

답변

0

두 가지 :

  1. 당신이 aFunction()에 결합하고 있기 때문에, 실제로 그 기능을 (바인딩은 페이지로드에 적용되는 경우) 실행하고 with: [function result]

  2. 을 바인드하려고하고 있습니다
  3. with을 함수 결과에 바인딩 할 수 있는지 확신하지 못합니다. 일반적으로이 현재 바인딩 컨텍스트의 속성으로 이루어집니다, 당신은 그 바인딩 컨텍스트를 변경 기억 바인딩이 with 사용하는 경우

0

(@lazyberezovsky은 "이름"그의 대답에 속성을 보여로) 현재 있음.

솔직히 말하자면, 당신의 모델은 솔직히 말하면 관측 가능한 공장처럼 행동하며 관측 대상을 포함하지 않고 관측 대상을 생성한다는 점에서 매우 이상한 설정을 가지고 있습니다.

var viewModel = function(data){ 
    var self = this; 
    self.Test = ko.observable(); 

    self.load = function(data) { 
     if (data) { 
      self.Test({ name: ko.observable(data.name) }); 
     } 
    }; 
    self.load(data); 
}; 

var data = { name: 'Matt' }; 
ko.applyBindings(new viewModel(data)); 

HTML :

모델 (예를 설명하기 쉽게된다 어디 잘못된 길을 가고있다) : 우리가 같은보다 전통적인 접근 방식에 모델을 변경 한 경우

:

<!-- Once inside this markup, the scope changes to the things contained 
inside of Test(). Therefore your aliasing needs to look like the following --> 
<div data-bind="with: Test"> 
    <div data-bind="text: name"></div> 
    <input data-bind="value: name, valueUpdate: 'afterkeydown'"></input> 
</div> 

JsFiddle : 여기

이 예제를 입증하는 jsfiddle입니다

설명

: 바인딩과에 대한 설명서를주의 할

그것은 중요 : 바인딩과

새로운 바인딩 컨텍스트를 생성 따라서 하위 객체 은 지정된 객체의 컨텍스트에서 바인딩됩니다.

...

을 같이 바인딩과를 사용하는 이유 이탤릭체 부분은 설명합니다 동적으로 관련 지을 수 있었던 값이/null로 정의 여부에 따라 하위 요소를 추가하거나 제거 할 구속력 여부를 내 관측 할 수있는 Test()이 null이거나 정의되지 않은 경우 예제에서 오류가 발생하지 않습니다. 프레임 워크는 모든 자손 요소를 동적으로 제거하여이 상황을 처리합니다. 이것은 내 jsfiddle에서 시연됩니다.

또한 속성 내에 객체에 name 속성을 지정 했으므로 명시 적으로 바인딩 할 수 있습니다.속성 자체에 바인딩을 사용하고 있다면 속성으로 바인딩하려고하는 해킹에 빠지게되므로 명시 적으로 IMO 속성을 사용하는 것이 가장 좋습니다.

도움이 되었기를 바랍니다.

관련 문제