【问题标题】:How To Access Javascript Functions from a Custom Kendo UI DataSource如何从自定义 Kendo UI 数据源访问 Javascript 函数
【发布时间】:2016-12-16 22:33:39
【问题描述】:

我正在使用带有 AngularJS 1.x 的 Kendo UI。我还将 Firebase 与 AngularFire 库一起使用。因为我使用的是 Firebase,所以我决定扩展我命名为 kendo.data.FirebaseDataSource.js 的 Kendo UI 数据源。

我的自定义 DataSource 扩展了 Kendo UI DataSource 并在我想访问 AngularFire 的功能的地方添加了自定义传输。

例如,在kendo.data.FirebaseDataSource.js 源中,我想访问 AngularFire 的 $firebaseArray 功能以及我创建的任何其他模块(实用程序等),它们驻留在另一个名为 my-custom-module.js 的文件中,但我遇到了问题看看我怎么能这样做。

我尝试执行以下操作,但它(显然)不起作用:

(function ($, kendo, firebase, $firebaseArray) {
    'use strict';

编辑

kendo.data.FirebaseDataSource.js

(function ($, kendo, firebase, $firebaseArray) {
 'use strict';

 var getCustomer = function () {

    var data = $firebaseArray(firebaseDataService.data);
    var listed = [];

    data.$loaded()
        .then(function(){
            angular.forEach(data, function(data){
                listed.push({
                    "firstName": data.firstName,
                    "lastName": data.lastName
                })
            })
        })


    return listed;
};


var firebaseTransports = {
    read: function (options) {
        var customers = getCustomers();

        options.success(customers);
    }
};

  kendo.data.extensions.FirebaseDataSource = kendo.data.DataSource.extend({
      init: function (options) {

        kendo.data.DataSource.fn.init.call(this, $.extend(true, {}, {      transport: firebaseTransports }, options));
        }
 }); 
})($, kendo, firebase, $firebaseArray);

编辑 2

controllerGrid.js

var fbDataSource = new kendo.data.extensions.FirebaseDataSource({
            schema: {
                model: {
                    id: "id",
                    fields: {
                        firstName: { type: "string" },
                        lastName: { type: "string" }
                    }
                }
            }
        })

vm.gridOptions = {
    dataSource: fbDataSource

基于上述controllerGrid.js 源,我所要做的就是让我的Kendo UI Grid 小部件使用kendo.data.FirebaseDataSource.js 的读取传输功能,只需简单引用我的gridOptions 中新创建的fbDataSource。

【问题讨论】:

  • 能否分享fiddle或代码sn-p,这将有助于解决问题。
  • @Shrinath 添加了一些来源。

标签: javascript angularjs firebase kendo-ui angularfire


【解决方案1】:

$firebaseArray 是一个仅存在于 Angular 中的概念,因为它是可注入的。您不能创建一个函数并将其传递给它以进行定义。您必须改用本机 firebase 调用,因为它们会暴露在窗口上。

要获取数据,您必须使用以下内容:

firebase.database().ref(...).on('value', function(snapshot){
    console.log(snapshot.val());
})

您可以在此处阅读有关如何使用它的文档:https://firebase.google.com/docs/database/web/read-and-write#read_data_once

如果你需要注入,你必须在指令中创建你的 kendoUi,然后你可以用那种方式注入。

.directive(..., function(){
    return {
        ...
        controller: function($firebaseArray){
            //kendo code here
        }
    }
})

【讨论】:

  • 谢谢。我想注入,但我如何从其他功能访问它,尤其是从 Kendo UI Grid 小部件?我添加了更多源代码供参考。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-04
相关资源
最近更新 更多