2015-02-20 2 views
0

Я написал собственный элемент привязки для сетки кендо в knockoutjs. Я бродил, столкнувшись с этой проблемой. Может ли один сказать мне разницу statement 1 и statement 2Разница между функцией с объектом и прямым объектом

var newObj = { obj1 : 'One', obj2: 'Two', obj3: true, obj4: [ 'One','Two' ] } 
//***Statement 1 
return newObj; // By this statement am getting an error 
//****** 
//****** Statement 2 
var result = function(){ return newObj; } 
return result; // By this statement program is working 

// ******

+1

результат - это функция, newObj - это объект. Они разные, поэтому первый не работает, – Sxntk

ответ

1

Вызывающий код ожидать функция, которая возвращает объект ...

Код может сделать много умных вещей, чтобы принять их, но намного проще, если у него простой и понятный интерфейс. Повинуйтесь этому интерфейсу.

Пример.

«Кто-то подарил вам новую рубашку».

Вы можете сделать умное мышление и посмотреть, что подарок обернут в красивую подарочную коробку или нет и предпримет правильное действие. (1) Если подарок завернут, разверните его и наденьте. (2) Если он не завернут, просто наденьте его.

Чтобы сделать интерфейс функции, которую вы используете (или передаете обратный вызов или какую-либо функцию, которую вы используете в коде), они решили не делать умную вещь (которую может быть сложно запрограммировать несколько раз), тогда как будто кто-то дал вам развернутую рубашку, но вы ожидали, что она будет обернута, поэтому вы просто разорвите рубашку, пытаясь развернуть ее (но она не завернута).

Резюме:

  1. Прочитайте соответствующую документацию для библиотеки, которую вы используете;
  2. Обязательно используйте интерфейс для библиотеки, которую вы используете;
1

Если вы действительно используете нокаут, как ваши теги предложить ... Я собираюсь принять удар в темноте и сказать, что вы, вероятно, искали что-то вроде этого:

Обратите внимание, что newObj является наблюдаемым вы получаете доступ к объекту с newObj()

var model = function(){ 
 
     var newObj = ko.observable({ obj1 : 'One', obj2: 'Two', obj3: true, obj4: [ 'One','Two' ] }) 
 
     //***Statement 1 
 
     
 
     function alertObj1(){ 
 
     //Notice i access object with() here. It is an observable is essentially a function. 
 
     alert(newObj().obj1); 
 
     } 
 
     
 
     return { 
 
     newObj: newObj, 
 
     alertObj1: alertObj1 
 
     } 
 
    } 
 

 

 

 
    ko.applyBindings(model);
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script> 
 
<div data-bind="with: newObj"> 
 
    <div data-bind="text: obj1"></div> 
 
    <div data-bind="text: obj2"></div> 
 
    <div data-bind="text: obj3"></div> 
 
    <h1>foreach</h1> 
 
    <div data-bind="foreach: obj4"> 
 
     <div data-bind="text: $data"></div> 
 
    </div> 
 
</div> 
 
<button data-bind="click: alertObj1" >Alert Prop Obj1</button>

0

Спасибо за ваши ответы.

Собственно пользователь: комментарий Sxntk помогает думать об этом по-разному. Небольшими исследованиями я узнал, что функция принятия кендо, эта функция возвращает объект.

И, наконец, специально благодаря Prusse и 4imble. Из-за вас я получил две новые вещи. Все ваши объяснения верны, но ответ sxntk подходит для моего вопроса.

Смежные вопросы