2016-09-28 8 views
0

모델에 값을 설정하는 중에 문제가 발생합니다.백본 모델 특성이 자동 값이 참일 때 볼 값을 바인딩하지 않습니다.

여기 내 코드입니다 : 내보기의 일부에서

SuperModel = Backbone.Model.extend({ 

    initialize: function() { 
     //some code...... 
    } 
}); 

ChildModel = SuperModel.extend({ 

    initialize: function() { 

     //some code.......... 
     SuperModel.prototype.initialize.call(this, arguments); 
    } 
}); 

, 나는 { silent : true }와 모델 (childModel의 경우)에 값을 설정하려합니다.

모델은 ModelBinder을 사용하여 뷰로 바인딩됩니다.

this.model.set('firstName','tom',{silent:true}); // Not Working 
this.model.set('firstName','tom'); // Working 
this.model.set('firstName','tom',{silent:true}).trigger('change'); // Not Working 

제가

SuperModel.prototype.initialize.call(this,arguments); 제거, silent:true 작동된다 (값은 UI 설정을 시작).

여기 내 모델의 값을 볼 수 있지만 내 UI에는 반영되지 않습니다. 당신이 부모 initialize 기능에 arguments를 전달하는 거라면

+0

충분하지 않기 때문에 더 많은 정보를 제공해 줄 수 있습니까? –

답변

0

나는 문제는 상위 모델 SuperModel에 있었다 발견 나는 값이 UI에 반영하지 않은 이유는 { silent: true }을 통과 할 때

this.set('editedElements', someValue); 

내가 진짜 이유를 몰라 코드의 라인을했다 옵션으로 사용했지만 나중에 코드 this.set(...)을 제거했을 때 작동하기 시작했습니다.

것은 내가 { silent: true }이 UI에 반영되어 전달 된 다음

this.set('editedAttributes'),...) -> this.attributes['editeAttributes'] = ... 

이제 그 모델 값처럼 수정했습니다.

+0

당신은 당신의 자신의 대답을 받아 들일 수 있습니다! –

+0

부모 모델이'set' 또는 어떤 함수를 호출 할 때, 당신이받은 옵션을 전달할 필요가 있습니다. 나는 그것을 입증하기 위해 나의 대답을 업데이트하려고 노력할 것이다. –

+0

제 경우에는 세트로 가지 않고 속성 객체에서 직접 액세스하기로 결정했습니다. – user3247425

2

은 첫째, 당신은 apply하지 call를 사용해야합니다. 당신이 통과하면

SuperModel.prototype.initialize.apply(this, arguments); 

다음, { silent: true }the Backbone's events가 트리거되지 않습니다. 나중에 이벤트를 시뮬레이션하려는 경우, 당신은 정확하게 시뮬레이션해야

var options = { silent: true }, 
    value = 'tom'; 

this.model.set('firstName', value, options); 
this.model.trigger('change:firstName', this.model, value, options) 
      .trigger('change', this.model, options); 

그러나 그것은 silent 옵션의 목적을 패배.