2013-07-29 2 views
1

mvc4에서 require js를 사용하고 있습니다.녹아웃을 사용하지 않는 j가 필요합니다.

보기

<script data-main="/scripts/about" src="/scripts/require.js" ></script> 
<article> 
<p> 
    Use this area to provide additional information. 
</p> 
</article> 

about.js

require.config({ 

    paths: { 
     page1: '/Scripts/page1', 
     page2: '/Scripts/page2', 
     knockout : '/Scripts/knockout-2.2.0' 
     } 

    }); 

    require(['page1', 'page2','knockout'], function (page1, page2) { 

    var car = new page1.Car(); 
     car.speed(60); 

     var cycle = new page2.Cycle(); 
     cycle.speed(20); 



     console.log(car.speed()); 
    console.log(cycle.speed()); 
    }); 

page1.js

define(function(){ 

    function Car() { 

    var self = this; 
    self.speed = ko.observable(); 

    } 

    }); 

PA GE2는 콘솔에서

define(function() { 

    function Cycle() { 

    var self = this; 
    self.speed = ko.observable(); 

    } 

    }); 

Car이 정의되지 말한다.

define(['knockout'],function(ko){ 

    function Car() { 

    var self = this; 
    self.speed = ko.observable(); 
    return { 
     speed: self.speed() // But don't forget to declare it in the returned object! 
     }; 
    } 

    }); 

업데이트 나는

답변

1

AFAIK의 requirejs 사전에 PAGE1 페이지 2

감사합니다 모두에서 이런 짓을 하나의 파일로로드 라이브러리를 분리합니다. 귀하의 page1과 page2에 녹아웃이로드되어 있지 않으므로 ko 네임 스페이스가 정의되어 있지 않으므로 ko.observables이 정의되지 않았으며 새 Car를 만들 때 정의되지 않습니다. 이 문제를 해결하려면 PAGE1에 녹아웃을로드해야하며 함수 인수로 ko 네임 스페이스를 제공하는 페이지 2 : 녹아웃 글로벌 네임 스페이스로에 대한

define(['knockout'], function(ko){ 

    function Car() { 

    var self = this; 
    self.speed = ko.observable(); 

    } 

}); 

또는 ko = require('knockout');을 사용하거나 심로드

편집 :

적어도 시도해 보았습니다. 그래서 여기에 후속 조치가 있습니다.

정의 할 때 모든보기 모델 및 기타 기능을 제공하는이 기능이 있습니다. requirejs 함수이고이 함수는 무언가 (즉 viewModel)를 반환해야합니다. 이렇게하면 정의 된 모듈 안에 개인 변수와 공용 변수 및 함수를 포함 할 수 있습니다.

define(['knockout'], function(ko){ 

    var Car = function() { 
    var self = this; 
    self.speed = ko.observable(); 
    } 

    return Car; 
}); 

이름은이 모듈 범위에서만 중요합니다. 당신이 당신의 모듈을 수입하여 about.js에서 당신은이 호출되는 방법을 결정할 수 있습니다 :

//load page1 script and give returned object 
//(this case a constructor) name: createCar 
require(['page1'], function (createCar) { 

    // now create new instance of your Car function: 
    var car = new createCar(); 
    car.speed(60); 

    console.log(car.speed()); 
}); 
+0

난 당신이 말한 시도했지만 불행하게도 그 같은 오류 시도 할 수 있습니다. – Ancient

+2

또한 모듈에서 무언가를 반환해야합니다. 모듈 정의에 대한 내용을 읽어보십시오. http://requirejs.org/docs/api.html#funcmodule –

+0

내 업데이트 참조. 돌아 왔지만 여전히 작동하지 않습니다. – Ancient

0

귀하의 모듈이 나타내는 코드를 return해야합니다. (객체를 생성하기 위해),

define(function(){  
    function Car() { 
     var self = this; 
     self.speed = ko.observable(); 
    };  
    return Car; 
}); 

모듈은 그것을 할 때 뭔가를 표현하는 함수 중 하나를, 또는 객체 (싱글을 표현하기 위해) : 예를 들어, Car 모듈은 다음과 같아야합니다. 모듈을 정의한 후에는 다른 모듈에서 require 모듈을 사용하십시오.

define(['pathtoCar/relativeToDataMainAttribute/fromRequireScriptTag'], 
function(Car){ 
    var ferrari = new Car(); 
    ... 
}); 
0

이이

define(function() { 

     function Cycle() { 

     var self = this; 
     self.speed = ko.observable(); 

     } 

    ///////////////////ADDD THISSSS NEWWWW LINEEEE////////// 

    return new cycle(); 

    }); 
관련 문제