2016-10-09 4 views
0

나는 녹아웃을 배우고 작은 예제를 시도하고 아래 내가 가지고있는 세 개의 파일에게 있습니다.KNOCKOUT : catch되지 않은 (inpromise) 참조 오류

index.html을

<!DOCTYPE html> 

<html> 
<head> 
    <title>TODO supply a title</title> 
    <meta charset="UTF-8"> 
    <meta name="viewport" content="width=device-width, initial-scale=1.0"> 
    <script data-main="js/main" src="js/libs/require/require.js"  type="text/javascript"></script> 
    <link href="css/libs/oj/v2.1.0/alta/oj-alta-min.css" rel="stylesheet" type="text/css"/> 
    <style> 
     table, th, td { 
border: 1px solid black; 
padding: 15px; 
} 
th { 
text-align: left;  
} 
thead{ 
border-style: double; 
font-weight: bold ; 
} 
    tr { 
text-align: left; 
    } 
    {background-color: #f5f5f5} 
    </style> 
</head> 
<body> 
    <div data-bind="ojModule: {name: 'introduction'}"></div> 
</body> 
    </html> 

viewModels -

/** 
* introduction module 
*/ 
define(['ojs/ojcore', 'knockout',oj,jquery,require 
], function (oj, ko) { 
/** 
* The view model for the main content view template 
*/ 
function introductionContentViewModel() { 
    var self = this; 
    self.firstName = ko.observable("Planet"); 
    self.lastName = ko.observable("Earth"); 

    self.fullName = ko.pureComputed(function() { 
     return this.firstName() + " " + this.lastName(); 
    }, this); 
    this.fullName= this.firstName() +" " +this.lastName(); 

this.resetName=function(){ 
alert("Reset Name!"); 
this.firstName("James"); 
this.lastName("Potter"); 
}; 

this.capitalizeName=function(){ 
var curValue=this.lastName(); 
this.lastName(curValue.toUpperCase()); 
}; 

    function seatReservation(fname,lname, reservMeals){ 
     this.firstName=fname; 
     this.lastName=lname; 
     this.meals = ko.observable(reservMeals); 
    /* this.formattedPrice=ko.computed(function(){ 
     var price = this.meals.price; 
     return price ? "$" + price.toFixed(2):"none"; 
    });*/ 
    };  

     this.mealsAvailable=[{mealName:"SandWich",price:25}, 
     {mealName:"Roti",price:23}, 
     {mealName:"Dal",price:22}]; 

    self.seats = ko.observableArray([ 
    new seatReservation("Steve","Hawkins", this.mealsAvailable[0]), 
    new seatReservation("Bert","Baltymoore", this.mealsAvailable[1]) 
    ]); 

//function to add new reservation into the table 
this.newReservationRow=function(){ 

    this.seats.push(new seatReservation("","",this.mealsAvailable[0])); 
};  
} 

return introductionContentViewModel; 
}); 

전망 introduction.js 내가 밖으로 원하는 넣어지고 있지 않다

<body> 
<form> 
<div class='liveExample'> 
<p> First Name: <span data-bind='text: firstName'/> </p> 
<p> Last Name: <span data-bind='text: lastName'/> </p> 
<p>First name: <input data-bind='value: firstName' /></p> 
<p>Last name: <input data-bind='value: lastName' /></p> 
<h2>Hello, <span data-bind='text: fullName'> </span>!</h2> 
<button data-bind='click: resetName' >Reset Name </button> 
<button data-bind='click: capitalizeName'>Capitalize </button> 
<input type='submit' data-bind='click: resetName' value='Reset'/> 
</div> 
<div class="Reservations"> 
<h2>Reservations </h2> 
<table> 
<thead> <tr><td> FirstName </td><td> LastName</td> <td> Meals</td><td>   Price</td></tr></thead> 
<tbody data-bind="foreach: seats"> 
<tr> 
    <td><input data-bind="value: firstName"/> </td> 
    <td><input data-bind="value: lastName"/> </td> 
    <td><select data-bind="options: meals,optionsText:'mealName'"></select>  </td> 
    <td data-bind="text: meals().price"> </td> 
    </tr> 
    </tbody> 
    </table><br> 
    <input type="submit" value="New Reservation" label="New Reservation" title="Click to Make a New Reservation" data-bind="click: newReservationRow"/> 
    </div> 
    </form> 
    </body> 

을 -introduction.html. 원하는 출력 코드에서 당신은 자신을 혼합하는 아래 링크

http://learn.knockoutjs.com/#/?tutorial=collections

답변

1

에서 이런 일이 많이 있습니다. 우선 그걸 정리하고 일이 당신을 위해 일하기 시작하는지 확인하는 것이 좋습니다. 개인적으로 self.xxxx 형식으로 머물러 있습니다.

또한 introduction.js 파일에서 정의 블록 내에서 "require"에 대한 참조를 제거하십시오. 이로 인해 문제가 발생할 수 있습니다. 어느 쪽이든, 그것은 필요하지 않습니다.

마지막으로 Oracle JET을 사용하여이 모든 작업을 수행하고있는 것으로 보입니다. introduction.html은 ojModule 내부에서 사용될 뷰이기 때문에 두 번째로 정의 된 body> 엘리먼트를 가질 필요가 없다. introduction.html은 ojModule에 바인딩 한 < div>를 대신 할 부분입니다.